2013-12-11 54 views
2

如從Java文檔:什麼樣的數據結構是一個枚舉變量?

public enum Day { 
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 
} 

在Ruby中,我相信這會是Symbols。從Ruby-Doc中:「Symbol對象表示Ruby解釋器中的名稱和一些Strings」。 Java中的這些是什麼以及編譯器如何處理它們?作爲Token還是參考文字?

回答

2

它們是enum類的常量實例,請檢查javadoc和實際implementation如果您有興趣。所以,如果你有這樣的:

public enum Weekday 
{ 
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 
} 

將在內部被翻譯成:

class Weekday extends Enum 
{ 
    public static final Weekday MONDAY = new Weekday("MONDAY", 0); 
    public static final Weekday TUESDAY = new Weekday("TUESDAY ", 1); 
    // more constants 

    private Weekday(String s, int i) 
    { 
    super(s, i); 
    } 

    // more methods 
} 

(從here例,對不起它不是一個英文資源)

1

枚舉是用Java描述hereenum類的對象,他們是在Java中完成的對象

這意味着他們可以有實例和類方法

您可以在hereherehere發現這是一個generic object ...可以預定義或類型Object

你可以在java中閱讀更多關於Generics以熟悉它

+0

我意識到,枚舉對象是'Enum'類的,但什麼是'MONDAY'或'TUESDAY'?它是一種像'null'這樣的特定類型的引用文字嗎? –

+1

我不知道,但我認爲這是一個'對象'在java中的所有類的根:D –

+0

我已經編輯了答案檢查它 –

2

MONDAYEnum<Day>實例,該類的一個靜態最終字段Day。每個Enum < Day>包含一個字段'String name'。你可以這樣做:

Enum<Day> x = Day.MONDAY; 

enum小號實例可以在switch語句中使用,他們是一個類型化的替代在某些情況下字符串。

枚舉也經常被用來線程安全地創建單身:

enum MySingleton{ 
    INSTANCE; 

    void instanceMethod(); 
}