2011-06-03 1 views
1

Прошу прощения за то, что этот вопрос может получиться. Я действительно не могу придумать, как это можно сказать.Как обойти отсутствие возможности расширения перечислений?

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

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

+1

возможного дубликата [Enum проблемы абстракции] (http://stackoverflow.com/questions/5539064/enum-abstraction-problem) – EJP

+0

@EJP - По моей Editted ссылки. – AedonEtLIRA

ответ

0

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

boolean reallyLoveThisDay = dayOfWeek.accept(new DefaultDayOfWeekVisitor<Boolean>() 
{ 
    public Boolean visitMonday(DayOfWeek dayOfWeek) { return false; } 
    public Boolean visitDefault(DayOfWeek dayOfWeek) { return true; } 
}); 
+0

Ничего себе. Это может усложниться быстро, так как список ваших vistors становится больше ... – AedonEtLIRA

+0

Я также не совсем уверен, как это будет работать с перечислениями. Как сохранить перечисления ... перечислимость? – AedonEtLIRA

+0

Это может стать большим, но не сложным. Не уверен, что вы подразумеваете под «перечислимостью». Как правило, я вижу две возможные причины для расширения перечисления - добавление значений перечисления или переопределение/добавление. В любом случае, перечисления Java являются неправильным инструментом для первой причины. Для второго вы можете моделировать операцию посетителем. «Переопределение» означает использование другого посетителя. Расширение посетителей тривиально. – lexicore