I have a question regarding the best design pattern for code reuse when dealing with Java enums. Basically, what I’m trying to achieve is being able to define several enums that model static business collections (sets of constants), but I’d also like to share behavior between them, with minimal coding.
This is trivial to achieve with class inheritance from abstract classes but, since Java enums cannot be extended (they can only implement interfaces), this type of work is tedious and involves a lot of error prone copy/paste work (copying the code from enum to enum). Examples of “business logic” that should be shared among all enums includes converting from/to Strings, instance and logical comparison, etc.
My best shot right now is using helper classes in conjunction with business interfaces, but this only goes so far in reducing code complexity (as all enums still have to declare and invoke the helper classes). See example (just to clarify):
public enum MyEnum {
A, B, C;
// Just about any method fits the description - equals() is a mere example
public boolean equals(MyEnum that) {
ObjectUtils.equals(this, that);
}
}
How do StackOverflowers deal with this “language feature”?
I would do the same, or combine the Enums into a super-enum.
With Java 8 this will be easier. You will be able to define a
defaultimplementation for interface methods and have theenumextend the interface.