Why can't I create an enum in an inner class in Java?
我要做的是:
1 2 3 | public class History { public class State { public enum StateType { |
Eclipse在
当我使
定义为嵌套类型的
在非静态类型中不能有静态嵌套类型(也称为"内部类",请参见JLS§8.1.3)。内部类和封闭实例)。
因此,在非静态嵌套类型中不能有
如果声明了这样的枚举:
1 | enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS} |
Java编译器将为您综合生成以下类:
1 2 3 4 5 6 7 8 9 10 | final class Suit extends java.lang.Enum<Suit> { public static final Suit SPADES; public static final Suit HEARTS; public static final Suit CLUBS; public static final Suit DIAMONDS; private static final Suit[] $VALUES; public static Suit[] values(); public static Suit valueOf(java.lang.String); private Suit(); } |
除了已经在该类中定义的静态字段(可以从其私有构造函数中推断),不打算创建该类的其他实例,但最重要的是,正如接受的答案中所提到的,内部类不能有静态成员(jls§8.1.3)。内部类和封闭实例),而且由于枚举合成类是这样,因此它使其不能作为内部类接受。
已经从+joachim sauer获得了足够的信息,我只是添加了一些额外的细节。
只有当内部类是静态嵌套的内部类时,才能定义内部枚举。见下文
1 2 3 4 5 6 | private static class DbResource { public enum DB { MERGE_FROM, MERGE_TO, MAIN; } } |
这适用于我的用例:
1 2 3 4 5 6 7 8 9 | public class History { public interface HConstants{ public enum StateType { PAST,CURRENT,FUTURE} } //Inner class public class State implements HConstants{ public StateType stateField = StateType.PAST; |