在什么情况下,枚举比保证唯一元素的 Collection 更合适(我猜是 java.util.Set 的实现者......)?
(这是我之前问题的一种跟进)
基本上,当它是一组在编译时已知的定义明确的固定值时。
您可以非常轻松地将枚举用作集合(使用EnumSet),它允许您定义行为、按名称引用元素、打开它们等。
当元素预先知道并且不会改变时,枚举是合适的。
如果元素可以在运行时更改,请使用 Set。
我不是java专家,但我的猜测是当你想保证某个值池时使用枚举,当你想保证唯一性时使用集合。示例是枚举一周中的几天(不能有“funday”)并收集 SSN(我知道的通用示例!)
很好的回应——我会试着总结一下,如果只是为了我自己的参考——看起来你应该在两种情况下使用枚举:
您需要的所有值在编译时都是已知的,以及以下一项或两项:
通过 Jon 提供的 Collection over enumeration 链接,您可以将枚举性能和安全性作为实现细节获得好处,而无需将其合并到您的整体设计中。
社区维基,如果您愿意,请进行编辑和改进!
注意:您可以同时使用 EnumSet。
在某些情况下,您的业务需要创建新项目,但同时需要基于一些固定项目的业务逻辑。对于你想要一个枚举的固定的,新的显然需要某种集合/数据库。
我已经看到项目使用此类项目的集合,从而导致业务逻辑取决于用户可以删除的数据。永远不要这样做,而是根据需要为固定的枚举创建一个单独的枚举,并为其他枚举创建一个集合。
另一种解决方案是使用具有不可变对象的集合来获取固定值。这些项目也可以驻留在数据库中,但有一个额外的标志,因此用户无法更新/删除它。