のメンバーフィールドの順序のJavaの列挙型のための重要な宣言の順序は、私がなぜこのギブは(コンパイル時)とはどういう意味なぜエラー列挙
public enum ErrorCodes {
public int id;
Undefined;
}
が、この1つは罰金です:
public enum ErrorCodes {
Undefined;
public int id;
}.
のメンバーフィールドの順序のJavaの列挙型のための重要な宣言の順序は、私がなぜこのギブは(コンパイル時)とはどういう意味なぜエラー列挙
public enum ErrorCodes {
public int id;
Undefined;
}
が、この1つは罰金です:
public enum ErrorCodes {
Undefined;
public int id;
}.
これはenumの構文です。しかし、これは異なる注文を可能にする可能性がありますが、フィールドに型を置いてenum値にするのを忘れるなど、間違いが起きている可能性があります。
編集:私は、フィールド、メソッド、初期化子、およびコンストラクタはどのような順序でも構いません。間違いを減らすためには、この制限が有効であると私は信じています。たとえフィールド/コンストラクタ/メソッドがどのような順序であっても、その順序で読みやすくするために非常に一般的です。
これは非常に満足のいく回答ではありませんが、Javaでenumがどのように定義されているかだけです。 「Java言語仕様」のセクション8.9 Enumsを参照してください。
Java Enumは特別な種類のクラスです。そのシンプルで、ほとんど有用な形態には、カスタムフィールドが含まれていません:
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();
}
このコンパイラの魔法は、右列挙ヘッダの後にフィールド定義を期待しています。
Sunは非常に親切で、eunumメンバーの定義に従うフィールドを追加できます。 public enum ErrorCodes { 未定義、定義済み、Foo、Bar; プライベートString myField; }
の列挙型フィールドの後に、カスタムコードを常に定義する必要があるのは、です。
それは "コンパイラの魔法"ではありません...それは一般的なまたは庭の "構文"です。 –
+1 - 注文が縛られていない場合、列挙型は読みにくく、構文解析が難しくなり、構文エラーメッセージが分かりにくくなります。 –