定数なしenumに抽象メソッド
定数なしenumに抽象メソッドを宣言するとコンパイルが通らなくなる。
どうやら抽象メソッドを宣言するだけではenumは抽象クラスにならないらしい。
package test; import java.lang.reflect.Modifier; public class EnumAbstractTest { private enum E1 { // 定数 A1 { @Override void hoge() { System.out.println("hoge"); } }, ; // 抽象メソッド abstract void hoge(); } private enum E2 { // 定数なし ; // 具象メソッド public void hoge() { System.out.println("hoge2"); } } private enum E3 { // 定数なし ; // 抽象メソッド コンパイルエラー // abstract void hoge(); } public static void main(final String[] args) { // private abstract static System.out.println(Modifier.toString(E1.class.getModifiers())); // private static final System.out.println(Modifier.toString(E2.class.getModifiers())); } }
Eclipseだとこんなエラーが出る。
The enum EnumAbstractTest.E3 can only define the abstract method hoge() if it also defines enum constants with corresponding implementations
(9/10追記) Oracleコンパイラだとこんなエラーが出る。(日本語)
E3はabstractでなく、E3内のabstractメソッドhoge()をオーバーライドしません