我有一个枚举SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
SOME_ENUM.values()
将始终按枚举声明的顺序返回枚举:
EN_ONE, EN_TWO, EN_THREE
?它是一个规则还是不保证在下一个JDK版本中不会被更改?
答案 0 :(得分:134)
Java语言规范使用这种显式语言:
@return一个包含此枚举类型常量的数组,按照它们被声明的顺序[Source]
所以,是的,它们将按声明顺序返回。值得注意的是,如果有人改变了课程,订单可能会随着时间而改变,所以要非常小心你如何使用它。
答案 1 :(得分:15)
是的,保证按顺序退回。
但是你应该避免依赖它,并且ordinal()
值,因为它可以在插入新项目后改变,例如。
答案 2 :(得分:9)
由您声明的值的顺序决定。但是,无法保证您(或其他人)将来不会重新排序/插入/删除值。所以你不应该依赖订单。
有效的Java第二版。 Edition将其第31项专用于一个密切相关的主题:使用实例字段而不是序数:
永远不要从序数中获取与枚举相关的值;将其存储在实例字段中。
答案 3 :(得分:7)
其他答案都很好,但不要对此发表评论:
“这是一个规则还是不保证在下一个规则中不会改变 Jdk发布了吗?“
我不相信对未来JDK的保证,所以你甚至不应该担心它们。没有办法强制执行它们,未来的JDK主管可能会决定重新考虑这些保证。这就像威斯敏斯特议会制度:“没有议会可以约束未来的议会。”
也就是说,JDK的历史表明了一致性。它们不会进行大量重大更改,因此您可以非常确信当前指定的(不仅仅是观察到的)行为将被保留。