Interface vs Singleton中的全局变量

时间:2018-12-27 10:29:10

标签: java interface singleton global-variables

我需要有几个全局变量(例如:数据库名称),这些变量将由程序中的其他一些类使用。

我可以在其中包含变量的情况下创建一个Singleton类,但是我发现我还可以简单地使用变量(没有任何方法)创建一个接口。由于接口中的变量是静态变量,因此这似乎是一个干净的实现。

我读到的想法是,在接口中声明变量是不良的设计,那么为什么这样做?创建全局变量的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

根据Sonar rule

仅使用接口来保存常量是一种代码味道。

Constants should not be defined in interfaces (squid:S1214)

  

根据《有效Java》的作者Joshua Bloch:   常量接口模式是对接口的不良使用。

     

一个类在内部使用一些常量是一个实现细节。

     

实现常量接口会使此实现细节泄漏到类的导出API中。对类的用户而言,该类实现一个常量接口并不重要。实际上,这甚至可能使他们感到困惑。更糟糕的是,它表示一种承诺:如果在将来的版本中对该类进行了修改,使其不再需要使用常量,则它仍必须实现该接口以确保二进制兼容性。如果非最终类实现了常量接口,

     

其所有子类的名称空间都会被接口中的常量污染。