Enum中的成员字段顺序

时间:2011-01-24 09:52:59

标签: java enums

为什么声明的顺序对Java枚举很重要,我的意思是为什么这会给出(编译时)错误

public enum ErrorCodes {
    public int id;
    Undefined;
}

但是这个很好:

public enum ErrorCodes {
    Undefined;
    public int id;

}.

3 个答案:

答案 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;     }

这就是您的自定义代码始终必须在枚举字段后定义的原因。