Java Enums та перевизначення методів

Читаючи книгу Programming Groovy, я дізнався про можливість перевизначати методи в enums. Про це навіть не здогадувався раніше, і це мене справді здивувало.
І справді, нехай у нас є enum в якому вказані дні в тижні:

enum DAYS {
MON, TUE,
WED, THU,
FRI, SAT,
SUN;

public String is() {
return "working";
}
}

Що ж, MON.is().equals("working") має бути істинним; але подібне тяжко сказати, наприклад, для SUN.is().equals("working").
Звичайно тепер ми можемо визначити enum наступним чином:

enum DAYS {
MON, TUE,
WED, THU,
FRI,
SAT {
public String is() {
return "week-end, day 1";
}
},
SUN {
public String is() {
return "week-end, day 2";
}
};

public String is() {
return "working";
}
}

І все, тепер SUN.is().equals("week-end, day 2") == true.
Проблема вирішена, при чому, без збереження зайвого поля - вказівника на рядок.

No comments: