2011-01-24 66 views
5

成員域爲什麼聲明的Java枚舉重要的順序,我的意思是爲什麼這得(編譯時)錯誤秩序枚舉

public enum ErrorCodes { 
    public int id; 
    Undefined; 
} 

但是這一次是罰款:

public enum ErrorCodes { 
    Undefined; 
    public int id; 

}. 

回答

5

因爲這是枚舉的語法。它可能允許不同的命令,但是這可能會出現錯誤,例如忘記在字段上放置類型並將其變爲枚舉值。

編輯:我說他們可以以任何順序的原因是字段,方法,初始化和構造函數可以以任何順序。我相信如果要減少錯誤,限制是有效的。儘管字段/構造函數/方法可以按任何順序排列,但爲了便於閱讀,它的順序很常見。

+2

+1 - 如果訂單不受限制,枚舉將更難以閱讀,語法將更難以解析,並且語法錯誤消息將不易理解。 – 2011-01-24 10:00:19

6

這不是一個非常令人滿意的答案,但它只是如何在Java中定義枚舉。請參閱Java語言規範中的8.9 Enums

1

Java枚舉是一種特殊的類。其簡單和最有用的形式不包含自定義字段:

public enum ErrorCodes { 
    Undefined, Defined, Foo, Bar 
} 

編譯器魔術創建類,看起來大約類似於如下:

public class ErrorCodes { 
    public final static ErrorCodes Undefined = new ErrorCodes(); 
    public final static ErrorCodes Defined = new ErrorCodes(); 
    public final static ErrorCodes Foo = new ErrorCodes(); 
    public final static ErrorCodes Bar = new ErrorCodes(); 
} 

這個編譯器魔法預計枚舉頭之後的字段定義權。

太陽是如此友好,讓我們添加這樣的字段,遵循eunum成員的定義: public enum ErrorCodes { Undefined,Defined,Foo,Bar; private String myField; }

這就是您的自定義代碼總是必須定義之後的枚舉字段的原因。

+0

這不是「編譯器魔力」......它是常見的或花園式的「語法」。 – 2011-01-24 10:02:44