【问题标题】:When to use Enum or Collection in Java何时在 Java 中使用 Enum 或 Collection
【发布时间】:2009-01-26 19:45:30
【问题描述】:

在什么情况下,枚举比保证唯一元素的 Collection(我猜是 java.util.Set 的实现者……)更合适?

(这是对我之前question的跟进)

【问题讨论】:

标签: java enums set


【解决方案1】:

基本上当它是一组定义明确的、在编译时已知的固定值时。

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

【讨论】:

  • 感谢 EnumSet 的链接 - 现在错过了。
  • 我以前从未见过 EnumMap - 尽管我经常使用 EnumSet!
  • 是的,我去年才偶然发现 EnumMap。好课。
  • @JonSkeet- 先生,您认为 .net 世界还需要向 Java 世界的兄弟学习吗??
  • @Perpetualcoder:绝对是枚举。 Java 枚举比 C#/.NET 枚举好得多。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我不是java专家,但我的猜测是当你想保证某个值池时使用枚举,当你想保证唯一性时使用集合。示例是枚举一周中的几天(不能有“funday”)并收集 SSN(我知道的通用示例!)

    【讨论】:

      【解决方案4】:

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

      您需要的所有值在编译时都是已知的,并且是以下一项或两项:

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

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

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

      【讨论】:

      • 此外,单成员枚举是一个很棒的单例。假设你真的想要一个单身人士。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-30
          • 1970-01-01
          • 2013-08-24
          • 1970-01-01
          • 2014-04-30
          相关资源
          最近更新 更多