2013-02-13 85 views
46

我尝试这样做是:为什么我不能在Java的内部类中创建枚举?

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

Eclipse中给了我这个编译错误的StateTypeThe member enum StateType must be defined inside a static member type

当我使State类为静态时,错误消失。我可以使State为静态,但我不明白为什么我不能在内部类中声明enum。被定义为嵌套类型

+1

请看看这个:http://stackoverflow.com/questions/700831/java-local-enums – 2013-02-13 16:23:06

+1

除非你想状态访问历史中的方法,使国家[静态类](http:// stackoverflow.com/a/1353326/2054731)。 – ArneHugo 2014-04-15 12:26:53

回答

2

已从+ Joachim Sauer获得足够的信息,我只是添加了一些额外的细节。

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

private static class DbResource { 

    public enum DB { 
     MERGE_FROM, MERGE_TO, MAIN; 
    } 
} 
3

如果你声明这样的枚举:

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. Inner Classes and Enclosing Instances),并且由于枚举合成类的作用,它使它不可接受为内部类。

+0

你是怎么在这里结束的? :) – 2017-10-10 14:48:27

+0

你是什么意思? – 2017-10-10 16:56:40