关于java:enum.values()-是确定性返回的枚举的顺序

enum.values() - is an order of returned enums deterministic

我有一个枚举SOME_ENUM

1
2
3
4
5
public enum SOME_ENUM {
  EN_ONE,
  EN_TWO,
  EN_THREE;
}

SOME_ENUM.values()将始终按枚举声明的顺序返回枚举:
EN_ONE, EN_TWO, EN_THREE? 是规则还是不能保证在下一个JDK版本中不会更改它?


Java语言规范使用以下显式语言:

@return an array containing the constants of this enum type, in the order they're declared [Source]

因此,是的,它们将按声明顺序返回。值得注意的是,如果有人更改课程,顺序可能会随着时间而改变,因此请务必谨慎使用。


是的,保证按此顺序返回它们。

但是,您应该避免依赖于ordinal()值,因为例如在插入新项目后它可能会更改。


它由声明值的顺序决定。但是,不能保证您(或其他人)将来不会重新排序/插入/删除值。因此,您不应该依赖订单。

有效的Java 2。 Edition将其第31项专用于一个紧密相关的主题:使用实例字段代替普通字段:

Never derive a value associated with an enum from its ordinal; store it in an instance field instead.


其他答案很好,但是不要对此发表评论:

"Is it a rule or it is not guaranteed to be not changed in the next
Jdk releases?"

我不相信将来的JDK存在保证,因此您甚至不必担心它们。没有办法执行它们,将来的JDK领导可能会决定放弃这种保证。就像威斯敏斯特议会制一样:"没有议会可以约束未来的议会。"

就是说,JDK的历史揭示了极好的一致性。它们并没有进行很多重大更改,因此您可以确信将保留当前指定的(不仅仅是观察到的)行为。