枚举VS类VS接口
我一直在阅读本网站上有关常量用法的大量post。
问题:我应该何时使用枚举作为常量,使用类或接口。
我看到我想要解决的两个关键情况。
1.多个项目在应用程序中使用的全局常量。
例:
- 常见的日志字符串
- 容器引用,如WebSphere EAR中使用的数据库映射引用
2.对象特定常量
例:
- 员工对象的员工工资率
从我读过的所有内容来看,这就是我认为我掌握的内容以及我正在寻找的意见。
对于情况1:设计方法:使用最终类和静态导入。
在这里看到: 接口常量的用途是什么?
对于情况2:设计方法:应用Enums来表示这些常量作为对象。
要记住的其他要点:
- 如果常量字符串属于该类,并且您只需要在使用它的类中保留字符串值
- 不要在情况1中使用接口。如上面链接中提到的Constant Interface Anti-pattern。 。
提前感谢您的想法和意见。
您放置的全局常量实际上应该位于属性文件中,因为它允许每个应用程序单独配置它们而无需修改代码。 对于特定于对象的常量,我对Enum
与static final
一般经验法则通常倾向于有多少元素以及这些元素的相关性。 如果它们之间存在很大的关系,例如Cards
Suits
,那么我会选择枚举。 如果它是用户的默认年龄,那么这将成为最终版本,因为没有目的使其成为枚举,因为它不需要在许多领域中被引用。 这些只是对我接触它的每种方式的一些想法。
-
不同项目使用的全局常量 :
Enum
最好将Enum
用于类中的public static final
成员。 我觉得更干净,更容易理解。 -
对象特定常量 :
public static final members in Class
。 因为,只在对象范围内需要它们,因此不需要为此创建新的Enum。
很好读
更新(修复损坏的链接):
- 充分利用Java 5.0:Enum技巧
- 充分利用Java 5.0:枚举示例
听起来几乎所有列出的数字1和2都属于配置文件或数据库表。
当您的员工获得加薪或页面名称更改时,您是否要重新编译代码?
除非有令人信服的理由,否则所有其他常量应该被建模为枚举。 这样您就可以实现快速对象相等比较的好处,并避免与String常量相关的问题。
然而,这些枚举的范围是特定于应用程序的。 如果枚举仅由类使用,则它应该是私有枚举。 如果它由多个类共享,那么它应该在它自己的类定义文件中。