У меня вопрос относительно лучшего шаблона проектирования для повторного использования кода при работе с перечислениями Java. По сути, я пытаюсь добиться определения нескольких перечислений, моделирующих статические бизнес-коллекции (наборы констант), но я также хотел бы поделиться поведением между ними с минимальным кодированием.
Это тривиально для наследования классов от абстрактных классов, но, поскольку перечисления Java не могут быть расширены (они могут реализовывать только интерфейсы), этот тип работы утомителен и включает в себя много ошибок при копировании / вставке (копирование код от перечисления к перечислению). Примеры «бизнес-логики», которая должна использоваться всеми перечислениями, включают в себя преобразование из / в строки, экземпляр и логическое сравнение и т. Д.
Мой лучший способ сейчас - использовать вспомогательные классы в сочетании с бизнес-интерфейсами, но это только доходит до снижения сложности кода (поскольку все перечисления все еще должны объявлять и вызывать вспомогательные классы). Смотрите пример (просто чтобы уточнить):
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);
}
}
Как StackOverflowers справляется с этой "языковой функцией"?