成員域爲什麼聲明的Java枚舉重要的順序,我的意思是爲什麼這得(編譯時)錯誤秩序枚舉
public enum ErrorCodes {
public int id;
Undefined;
}
但是這一次是罰款:
public enum ErrorCodes {
Undefined;
public int id;
}.
成員域爲什麼聲明的Java枚舉重要的順序,我的意思是爲什麼這得(編譯時)錯誤秩序枚舉
public enum ErrorCodes {
public int id;
Undefined;
}
但是這一次是罰款:
public enum ErrorCodes {
Undefined;
public int id;
}.
因爲這是枚舉的語法。它可能允許不同的命令,但是這可能會出現錯誤,例如忘記在字段上放置類型並將其變爲枚舉值。
編輯:我說他們可以以任何順序的原因是字段,方法,初始化和構造函數可以以任何順序。我相信如果要減少錯誤,限制是有效的。儘管字段/構造函數/方法可以按任何順序排列,但爲了便於閱讀,它的順序很常見。
這不是一個非常令人滿意的答案,但它只是如何在Java中定義枚舉。請參閱Java語言規範中的8.9 Enums。
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; }
這就是您的自定義代碼總是必須定義之後的枚舉字段的原因。
這不是「編譯器魔力」......它是常見的或花園式的「語法」。 – 2011-01-24 10:02:44
+1 - 如果訂單不受限制,枚舉將更難以閱讀,語法將更難以解析,並且語法錯誤消息將不易理解。 – 2011-01-24 10:00:19