I don't agree with either of the two proposals.
Constants should be in their pertinent classes, not in an all-constant class in either of the two forms proposed.
There shouldn't be constants-only classes/interfaces.
A class CreditCard
(not an internal class) should exist. This class/interface has methods relative to credits cards as well as the constants UI_EXPIRY_MONTH
and UI_ACCOUNT_ID
.
There should exist a class/interface BankAccount
(not an internal class). This class/interface has methods relative to bank accounts as well as constant UI_ACCOUNT_ID
.
For example in the Java API every class/interface has its constants. They are not in a Constants class/interface with hundreshundreds of costantsconstants, either grouped into inner clasesclasses or not.
For example, these constants pertinent to result sets are in the interface ResultSet
.:
static int CLOSE_CURSORS_AT_COMMIT
static int CONCUR_READ_ONLY
static int CONCUR_UPDATABLE
static int FETCH_FORWARD
static int FETCH_REVERSE
static int FETCH_UNKNOWN
static int HOLD_CURSORS_OVER_COMMIT
static int TYPE_FORWARD_ONLY
static int TYPE_SCROLL_INSENSITIVE
static int TYPE_SCROLL_SENSITIVE
This interface has methodsmethod signatures relative to result sets, and implementedimplementing classes implement that behavior. They are not mere constant-holders.
These constants pertinent to UI actions are in the interface javax.swing.Action
:
static String ACCELERATOR_KEY
static String ACTION_COMMAND_KEY
static String DEFAULT
static String LONG_DESCRIPTION
static String MNEMONIC_KEY
static String NAME
static String SHORT_DESCRIPTION
static String SMALL_ICON
Implementing classes have behavior relative to UI actions, they are not mere constant holders.
I know at least one "constants" interface (SwingConstants
) with no methods but it doesn't have hundreshundreds of costantsconstants, just a few, and they are all related to directions and positions of UI elements:
static int BOTTOM
static int CENTER
static int EAST
static int HORIZONTAL
static int LEADING
static int LEFT
static int NEXT
static int NORTH
static int NORTH_EAST
static int NORTH_WEST
static int PREVIOUS
static int RIGHT
static int SOUTH
static int SOUTH_EAST
static int SOUTH_WEST
static int TOP
static int TRAILING
static int VERTICAL
static int WEST
I think constants only classes are not good OO design.