枚举VS类VS接口

时间:2011-05-26 19:50:16

标签: java enums constants

我一直在阅读本网站上关于常量用法的很多帖子。

问题: 什么时候我应该使用Enums作为常量,使用类或接口。

我看到了我想要解决的两个关键问题。

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

示例:

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

2。对象特定常量

示例:

  • 员工对象的员工工资率

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

对于情况1: 设计方法:使用最终类和静态导入 见到这里:What is the use of interface constants?

情况2: 设计方法:使用Enums将这些常量表示为对象。

要记住的其他要点:

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

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

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

  1. 不同项目使用的全局常量Enum
    最好在课堂上使用Enum而不是public static final成员。我觉得更干净,更容易理解。

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

  3. 很好read

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

    1. Making the Most of Java 5.0: Enum Tricks
    2. Making the Most of Java 5.0: Enum Example

答案 2 :(得分:0)

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

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

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

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