enum.values() – 是确定性返回枚举的顺序
我有一个枚举SOME_ENUM
:
public enum SOME_ENUM { EN_ONE, EN_TWO, EN_THREE; }
SOME_ENUM.values()
总是按照枚举声明的顺序返回枚举: EN_ONE, EN_TWO, EN_THREE
? 这是一个规则还是不能保证在下一个JDK版本中不会更改?
Java语言规范使用这种明确的语言:
@返回一个包含这个枚举types常量的数组,按照它们声明的顺序[Source]
所以,是的,他们将按照申报的顺序归还。 值得注意的是,如果有人改变课程,顺序可能会随着时间的推移而改变,所以要非常小心你如何使用它。
是的,这是保证按顺序退还。
但是,您应该避免依赖于此,并在ordinal()
值,因为它可以更改后插入新项目,例如。
它是由您的值声明的顺序决定的。但是, 不能保证您(或其他人)将来不会重新sorting/插入/删除值 。 所以你不应该依赖这个命令。
有效的Java第二。 版将其项目31专用于密切相关的主题: 使用实例字段而不是序号 :
永远不要从它的序号中得出与枚举相关的值; 将其存储在实例字段中。
其他答案是好的,但不要评论这个:
“这是一个规则还是不能保证在未来的Jdk版本中没有改变?”
我不相信对未来JDK的保证,所以你不应该担心它们。 没有办法执行它们,未来的JDK线索可能会决定违背这样的保证。 就像威斯敏斯特的议会制度:“没有议会可以束缚未来的议会”。
也就是说,JDK的历史performance出极好的一致性。 他们没有做出太多突破性的改变,所以你可以非常自信地保持当前指定的 (而不仅仅是观察到的)行为。