何时在Java中使用Enum或Collection

时间:2009-01-26 19:45:31

标签: java enums set

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

(这是我之前question

的后续行动

6 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

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

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

社区维基,如果您愿意,请进行编辑和改进!

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

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

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