成员域为什么声明的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