I have been reading a lot of posts on this site regarding the usage of constants.
Question: When should I use Enums for constants, vs using classes or interfaces.
I see 2 key situations I am looking to address.
1. Global Constants used in a applications by multiple projects.
Example:
- Common logging strings
- Container references like a database mapping reference used in WebSphere EAR's
2. Object Specific Constants
Example:
- Employee pay rates for an Employee Object
From everything I have read this is what I think I have a grasp on and what I am looking for an opinion on.
For situation 1:
Design Approach: Use a final class and a static import.
Seen here: What is the use of interface constants?
For Situation 2: Design Approach: Apply the use of Enums to represent those constants as a object.
Additional points to remember:
- If the constant string belongs to the class and you only need the string value keep in the class that uses it
- Don't use an Interface for situation 1. As mentioned in the link above as Constant Interface Anti-pattern. .
Thanks in advance for thoughts and opinions.