Javaの列挙タイプ-2:高度なプロパティ
Javaでは、列挙タイプは本質的にクラスであり、列挙の定数はその列挙タイプのインスタンスである.列挙タイプにはいくつかの制限があります.たとえば、サブ列挙タイプを派生させることはできません.コンストラクション関数を呼び出すことはできませんが、列挙タイプでコンストラクション関数、フィールド、メソッドを定義できます.たとえば、次のようにします.
上のコードでは、Weekdayにnew文で呼び出すことはできませんが、定数を宣言するときに呼び出すことができます.定数の後ろに括弧を付けてパラメータを渡すだけでいいです.このように異なる定数オブジェクトには異なる属性値があり、この値はフィールドabbrに格納されます.また,この列挙タイプはメソッドを定義し,ある定数への参照を得た後,getAbbreviation()メソッドを呼び出すことができる.例:
列挙タイプには、定数を宣言するときに列挙のメソッドを書き換えることで、次のような「マルチステート」の効果を達成する特殊な機能があります.
CONST経由でAとCONST_B someMethod()メソッドを呼び出すと、画面にdefault descriptionが印刷され、CONT_C someMethod()メソッドを呼び出すとanother descriptionが印刷されます.
参考書:『Javaプログラミング思想』『SCJP試験ガイド』
enum Weekday {
SUNDAY("SUN"),
MONDAY("MON"),
TUESDAY("TUE"),
WEDNESDAY("WED"),
THURSDAY("THU"),
FRIDAY("FRI"),
SATURDAY("SAT");
private String abbr;
public Weekday(String abbr) {
this.abbr = abbr;
}
public getAbbreviation() {
return abbr;
}
}
上のコードでは、Weekdayにnew文で呼び出すことはできませんが、定数を宣言するときに呼び出すことができます.定数の後ろに括弧を付けてパラメータを渡すだけでいいです.このように異なる定数オブジェクトには異なる属性値があり、この値はフィールドabbrに格納されます.また,この列挙タイプはメソッドを定義し,ある定数への参照を得た後,getAbbreviation()メソッドを呼び出すことができる.例:
System.out.println(Weekday.SUNDAY.getAbbreviation());
列挙タイプには、定数を宣言するときに列挙のメソッドを書き換えることで、次のような「マルチステート」の効果を達成する特殊な機能があります.
public enum SomeEnum {
CONST_A, CONST_B, CONST_C {
public void someMethod() {
System.out.println("another description");
}
};
public void someMethod() {
System.out.println("default description");
}
}
CONST経由でAとCONST_B someMethod()メソッドを呼び出すと、画面にdefault descriptionが印刷され、CONT_C someMethod()メソッドを呼び出すとanother descriptionが印刷されます.
参考書:『Javaプログラミング思想』『SCJP試験ガイド』