为什么我不能在Java的内部类中创build一个枚举?

我试图做的是这样的:

public class History { public class State { public enum StateType { 

Eclipse在StateType上给我这个编译错误: The member enum StateType must be defined inside a static member type

当我使State类为静态时,错误消失。 我可以使State静态,但我不明白为什么我不能在内部类中声明一个enum

被定义为嵌套types的enumtypes总是隐式static (参见JLS§8.9。枚举 )

你不能在非静态嵌套types(又称“内部类”,见JLS§8.1.3。内部类和Enclosing实例 )中使用静态嵌套types。

因此,在非静态嵌套types中不能有enum内部types。

已经从+ Joachim Sauer得到足够的信息,我只是增加一些额外的细节。

只有当你的内部类是静态嵌套的内部类时,才可以定义内部枚举。 见下文

 private static class DbResource { public enum DB { MERGE_FROM, MERGE_TO, MAIN; } } 

如果你宣布这样的枚举:

 enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS} 

Java编译器会为你合成生成以下类:

 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(); } 

除了那些已经在其中定义的静态字段(就像你可以从它的私有构造函数中推断的那样)来创build这个类的其他实例,但是最重要的是,正如在接受的答案中所提到的,一个内部类不能有静态成员( JLS§8.1.3。Inner Classes和Enclosing Instances ),并且由于枚举合成类的作用,它使得它不能被接受为内部类。