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

我要做的是:

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

49089 次浏览

定义为嵌套类型的 enum类型总是隐式 static(参见 JLS 8.9. Enums)

不能在非静态类型内部使用静态嵌套类型(也称为“内部类”,参见 JLS 8.1.3内部类和封闭实例)。

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

已经足够的信息从 + 约阿希姆绍尔,我只是增加了一些额外的细节。

只有内部类是静态嵌套内部类时,才能定义内部枚举

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

除了那些已经在其中定义的静态字段(你可以从它的私有构造函数中推断出来)之外,我们无意创建这个类的其他实例,但最重要的是,正如公认的答案中所提到的,内部类不能有静态成员(JLS 8.1.3内部类和封闭实例) ,而且由于枚举合成类有静态成员,所以它作为内部类是不可接受的。

这对我的用例很有用:

public class History {


public interface HConstants{
public enum StateType { PAST,CURRENT,FUTURE}
}


//Inner class
public class State implements HConstants{
public StateType stateField = StateType.PAST;