枚举VS类VS接口

我一直在阅读本网站上有关常量用法的大量post。

问题:我应该何时使用枚举作为常量,使用类或接口。

我看到我想要解决的两个关键情况。

1.多个项目在应用程序中使用的全局常量。

例:

  • 常见的日志字符串
  • 容器引用,如WebSphere EAR中使用的数据库映射引用

2.对象特定常量

例:

  • 员工对象的员工工资率

从我读过的所有内容来看,这就是我认为我掌握的内容以及我正在寻找的意见。

对于情况1:设计方法:使用最终类和静态导入。
在这里看到: 接口常量的用途是什么?

对于情况2:设计方法:应用Enums来表示这些常量作为对象。

要记住的其他要点:

  • 如果常量字符串属于该类,并且您只需要在使用它的类中保留字符串值
  • 不要在情况​​1中使用接口。如上面链接中提到的Constant Interface Anti-pattern。 。

提前感谢您的想法和意见。

您放置的全局常量实际上应该位于属性文件中,因为它允许每个应用程序单独配置它们而无需修改代码。 对于特定于对象的常量,我对Enumstatic final一般经验法则通常倾向于有多少元素以及这些元素的相关性。 如果它们之间存在很大的关系,例如Cards Suits ,那么我会选择枚举。 如果它是用户的默认年龄,那么这将成为最终版本,因为没有目的使其成为枚举,因为它不需要在许多领域中被引用。 这些只是对我接触它的每种方式的一些想法。

  1. 不同项目使用的全局常量Enum
    最好将Enum用于类中的public static final成员。 我觉得更干净,更容易理解。

  2. 对象特定常量public static final members in Class 。 因为,只在对象范围内需要它们,因此不需要为此创建新的Enum。

很好读

更新(修复损坏的链接):

  1. 充分利用Java 5.0:Enum技巧
  2. 充分利用Java 5.0:枚举示例

听起来几乎所有列出的数字1和2都属于配置文件或数据库表。

当您的员工获得加薪或页面名称更改时,您是否要重新编译代码?

除非有令人信服的理由,否则所有其他常量应该被建模为枚举。 这样您就可以实现快速对象相等比较的好处,并避免与String常量相关的问题。

然而,这些枚举的范围是特定于应用程序的。 如果枚举仅由类使用,则它应该是私有枚举。 如果它由多个类共享,那么它应该在它自己的类定义文件中。