何时在Java中使用Enum或Collection

在什么情况下枚举更适合比例如保证独特元素的集合(java.util.Set的实现者,我猜……)?

(这是我之前的问题的后续跟进)

基本上,当它是在编译时已知的定义明确的固定值集合时。

您可以非常轻松地使用枚举(使用EnumSet ),它允许您定义行为,按名称引用元素,打开它们等。

当元素事先知道并且不会改变时,枚举是合适的。

如果元素可以在运行时更改,请使用Set。

我不是java大师,但我的猜测是当你想要保证某个价值池时使用枚举,并且当你想要保证唯一性时使用集合。 例如,列举一周中的几天(不能有“基金会”)并拥有一个SSN集合(我知道通用示例!)

很好的回答 – 我会尝试总结,如果只是为了我自己的参考 – 有点看起来你应该在两种情况下使用枚举:

您需要的所有值在编译时都是已知的,以及以下任一或两者:

  • 你想要比通常的集合实现更好的性能
  • 您希望将潜在值限制为在编译时指定的值

通过Jon提供的Collection over enumeration链接,您可以获得枚举性能和安全性作为实现细节的好处,而无需将其整合到您的整体设计中。

社区维基,请根据需要进行编辑和改进!

注意:您可以同时使用EnumSet。

在某些情况下,您的业务需要创建新项目,但同时业务逻辑需要基于某些固定项目。 对于你想要枚举的固定的,新的显然需要某种集合/ db。

我已经看到使用集合来处理这类项目的项目,导致业务逻辑取决于可以被用户删除的数据。 永远不要这样做,但是根据需要,为固定的枚举创建单独的枚举,为其他枚举创建集合。

另一种解决方案是使用具有不可变对象的集合作为固定值。 这些项目也可以驻留在数据库中,但有一个额外的标志,因此用户无法更新/删除它。