为什么声明的顺序对Java枚举很重要,我的意思是为什么这会给出(编译时)错误
public enum ErrorCodes {
public int id;
Undefined;
}
但是这个很好:
public enum ErrorCodes {
Undefined;
public int id;
}.
答案 0 :(得分:6)
这不是一个非常令人满意的答案,但它只是如何在Java中定义枚举。请参阅Java语言规范中的8.9 Enums部分。
答案 1 :(得分:5)
因为这是枚举的语法。它可以允许不同的顺序,但是这可能是错误的,例如忘记在字段上放置一个类型并将其转换为枚举值。
编辑:我说他们可以按任何顺序排列的原因是字段,方法,初始化程序和构造函数可以按任何顺序排列。我相信如果要减少错误,限制是有效的。即使字段/构造函数/方法可以按任何顺序排列,但为了便于阅读,它们非常常见。答案 2 :(得分:1)
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 { Undefined,Defined,Foo,Bar; private String myField; }
这就是您的自定义代码始终必须在枚举字段后定义的原因。