繁体   English   中英

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

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

我有一个枚举SOME_ENUM

public enum SOME_ENUM {
  EN_ONE,
  EN_TWO,
  EN_THREE;
}

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

Java语言规范使用这种显式语言:

@return一个包含此枚举类型常量的数组,按它们声明的顺序[来源]

所以,是的,它们将按照声明顺序返回。 值得注意的是,如果有人改变了课程,订单可能会随着时间而改变,所以要非常小心你如何使用它。

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

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

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

有效的Java第二。 Edition将其第31项专用于一个密切相关的主题: 使用实例字段而不是序数

永远不要从序数中得出与枚举相关的值; 将其存储在实例字段中。

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

“它是一个规则还是不保证在下一个Jdk版本中不会被更改?”

我不相信对未来JDK的保证,所以你甚至不应该担心它们。 没有办法强制执行它们,未来的JDK主管可能会决定重新考虑这些保证。 这就像威斯敏斯特议会制度:“没有议会可以约束未来的议会。”

也就是说,JDK的历史表现出极好的一致性。 它们不会进行大量重大更改,因此您可以非常确信将保留当前指定的 (不仅仅是观察到的)行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM