Rso's Jotter

日々の開発の知見のメモやその他雑記

enumに関するメモ

Eという名の列挙型に対する直接のスーパークラスEnum
列挙型の中にフィールドやメソッドを定義できる
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つに,このフィールドと名前が被らないためだと考えられる