如從Java文檔:什麼樣的數據結構是一個枚舉變量?
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
在Ruby中,我相信這會是Symbols
。從Ruby-Doc中:「Symbol
對象表示Ruby解釋器中的名稱和一些Strings
」。 Java中的這些是什麼以及編譯器如何處理它們?作爲Token
還是參考文字?
如從Java文檔:什麼樣的數據結構是一個枚舉變量?
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
在Ruby中,我相信這會是Symbols
。從Ruby-Doc中:「Symbol
對象表示Ruby解釋器中的名稱和一些Strings
」。 Java中的這些是什麼以及編譯器如何處理它們?作爲Token
還是參考文字?
它們是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例,對不起它不是一個英文資源)
MONDAY
是Enum<Day>
實例,該類的一個靜態最終字段Day
。每個Enum < Day>包含一個字段'String name'。你可以這樣做:
Enum<Day> x = Day.MONDAY;
的enum
小號實例可以在switch
語句中使用,他們是一個類型化的替代在某些情況下字符串。
枚舉也經常被用來線程安全地創建單身:
enum MySingleton{
INSTANCE;
void instanceMethod();
}
我意識到,枚舉對象是'Enum'類的,但什麼是'MONDAY'或'TUESDAY'?它是一種像'null'這樣的特定類型的引用文字嗎? –
我不知道,但我認爲這是一個'對象'在java中的所有類的根:D –
我已經編輯了答案檢查它 –