2013-02-13 102 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

相關問題