【问题标题】:Properties or Enums or static final属性或枚举或静态最终
【发布时间】:2012-01-14 19:19:23
【问题描述】:

在名称-值对中声明预定义常量时,我​​一直在“java.util.Properties”、“enums”或具有“public static final”值的单独类之间随机选择。

为了将来参考,我需要一些关于采取哪种方法的指南。

谢谢!

【问题讨论】:

  • 我个人有一个带有公共静态最终值的类文件。我发现它很容易指向,我知道在哪里看。如果您开始将枚举或任何东西放在特定的类中,现在您必须记住它在哪个类中。就性能而言,我不知道。我相信其他人能够回答这个问题。

标签: java name-value


【解决方案1】:

这完全取决于您不断的生命周期。 根据定义,常量是不动的东西。选择正确的方法将是一个可能发生变化和重新包装需求的问题。

  • 如果你真的确定,它永远不会移动:静态最终是要走的路。 Pi、数学常数之类的就是一个很好的例子。

  • 如果您认为有潜在的变化,但需要易于代码操作并且不担心优势兼容性,枚举是可以的。前段时间我为错误代码这样做了。

  • 如果您认为存在潜在的更改,但又不希望此更改影响您的代码,那么属性(带有资源包)是更好的选择。标签(翻译)、初始设置等也是一个很好的例子。

【讨论】:

  • @Raj 使用枚举作为常量集,例如在纸牌游戏中,您有黑桃、梅花、红心和方块。另一种情况可能是支持的文件类型 PNG、GIF 等。如果您稍后添加 BMP 不会有任何缺点,因为那时您将拥有另一个 API 版本,包括与新实现匹配的枚举。
  • 非常彻底的答案。 +1。 Raj:您还应该注意@Sean Reilly 对我的回答的评论。
【解决方案2】:

static final 字段在您无法形成一组明确的封闭选项时使用,您可以从中选择变量的状态。相反,如果可以,您总是使用枚举。

现在,当您想要保留键值字典时,无论其性质如何,都可以使用 Properties 类型对象,有时也可以使用 Map。

【讨论】:

  • 如果您需要键值对,并且键是一组封闭的选项,那么可以考虑使用 java.util.EnumMap 结合枚举和映射方法
  • 确实如此。另外,请注意,如果您使用的是常量而不是 真正 来自具有特定领域含义的封闭集合的值,则 static final 是更好的方法。此外,如果您仅在自己的类中使用常量,请考虑将 public 修饰符更改为 private
【解决方案3】:

还有一点需要考虑——这些字符串会在不同的版本中改变吗?即您可能有法语版、中文版、“高级”版吗?如果是这样,Properties / ResourceBundles 等就是要走的路。

【讨论】:

    【解决方案4】:

    当您的常量集是固定的并且预计不会经常更改时,请使用枚举。如果它经常更改,则很难保持与以前版本的向后兼容性。如果在客户端服务器架构中两者都有一些 Enum 的不同版本。例如

    服务器:public enum Priority{ HIGH,LOW,MEDIUM,AVERAGE}

    客户:public enum Priority{ HIGH,LOW,MEDIUM}

    假设如果服务器将 Priority.AVERAGE 发送给客户端,那么客户端将抛出异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多