列挙型の中にフィールドやメソッドを定義できる
public enum EnumTest {
ONE(1), TWO(2);
int data;
EnumTest(final int i){
this.data = i;
}
}
列挙定数毎にも独自の振る舞いを定義できる
enum Operation{
PLUS{
double eval(double x, double y){ return x+y;}
},
MINUS{
double eval(double x, double y){ return x-y;}
};
abstract double eval(double x, double y);
}
列挙定数において,クラス本体はオプションであり,直接囲んでいる列挙型を拡張した匿名クラス宣言が暗黙に定義される
前述の例で言えば列挙定数ONEもTWOもPLUSもMINUSもそれぞれ外側の列挙型の内部の匿名クラスとして扱われる.
列挙型Eの中でnというという列挙定数が宣言された場合,型Eでnという名前のpublic static finalフィールドが暗黙に定義される
おそらく列挙定数が匿名クラスとして扱われる理由の1つに,このフィールドと名前が被らないためだと考えられる