Как обойти отсутствие возможности расширения перечислений?

Я заранее извиняюсь за то, как этот вопрос может обернуться. Я действительно не могу придумать хороший способ сказать это.

Я бы очень хотел, чтобы перечисление расширяло другое ради использования абстракции метода. Это сделало бы жизнь намного проще. Увы, не могу. Итак, кто-нибудь знает, как я могу реализовать такую ​​функцию, как вызов абстрактного метода? Я попробовал интерфейс, но быстро понял, что вы не можете использовать универсальный Enum.

Редактировать 1: я только что нашел это, я посмотрю на него и посмотрю, смогу ли я получить свой ответ из помощь. Однако я оставлю это открытым и без ответа на всякий случай.


person ahodder    schedule 03.06.2011    source источник
comment
возможный дубликат проблемы с абстракцией Enum   -  person user207421    schedule 04.06.2011
comment
@EJP - согласно моей отредактированной ссылке.   -  person ahodder    schedule 04.06.2011


Ответы (1)


Мы часто используем шаблон посетителя, чтобы разрешить расширение перечислений внешними функциями. Что-то типа

boolean reallyLoveThisDay = dayOfWeek.accept(new DefaultDayOfWeekVisitor<Boolean>()
{
  public Boolean visitMonday(DayOfWeek dayOfWeek) { return false; }
  public Boolean visitDefault(DayOfWeek dayOfWeek) { return true; }
});
person lexicore    schedule 03.06.2011
comment
Я также не совсем уверен, как это будет работать с перечислениями. Как поддерживать перечисления... перечисляемость? - person ahodder; 04.06.2011
comment
Это может стать большим, но не сложным. Не уверен, что вы подразумеваете под перечислимостью. Как правило, я вижу две возможные причины для расширения перечисления: добавление значения перечисления или переопределение/добавление методов. Перечисления Java в любом случае являются неправильным инструментом по первой причине. Для второго можно смоделировать операцию посетителя. Переопределение будет означать использование другого посетителя. Расширение посетителей тривиально. - person lexicore; 04.06.2011