关于java:Enums VS Classes VS Interfaces

Enums VS Classes VS Interfaces

我在这个网站上读了很多关于常量用法的文章。

问题:什么时候应该使用常量的枚举,而使用类或接口的枚举。

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

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

例子:

  • 常用日志记录字符串
  • 容器引用,如中使用的数据库映射引用WebSphere EAR的
  • 小精灵2。对象特定常量

    例子:

    • 员工对象的员工工资率
    • 小精灵

      从我读过的每一篇文章来看,这就是我认为我掌握的东西,以及我正在寻找的观点。

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

      对于情况2:设计方法:应用枚举将这些常量表示为对象。

      需要记住的其他要点:

      • 如果常量字符串属于类,并且只需要字符串值保留在使用它的类中
      • 不要在情况1中使用接口。如上链接所述,作为恒定的接口反模式。.
      • 小精灵

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


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


      • 不同项目使用的全局常量:Enum。在一个类中,最好使用Enum而不是public static final成员。我想更干净更容易理解。

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

      • 读得不错

        更新(修复断开的链接):

      • 充分利用Java 5:EnUM技巧
      • 充分利用Java 5:EnUM示例

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

        您想在员工加薪或页面名称更改时重新编译代码吗?

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

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