我需要有几个全局变量(例如:数据库名称),这些变量将由程序中的其他一些类使用。
我可以在其中包含变量的情况下创建一个Singleton类,但是我发现我还可以简单地使用变量(没有任何方法)创建一个接口。由于接口中的变量是静态变量,因此这似乎是一个干净的实现。
我读到的想法是,在接口中声明变量是不良的设计,那么为什么这样做?创建全局变量的最佳方法是什么?
答案 0 :(得分:2)
根据Sonar rule:
仅使用接口来保存常量是一种代码味道。 Constants should not be defined in interfaces (squid:S1214)
根据《有效Java》的作者Joshua Bloch: 常量接口模式是对接口的不良使用。
一个类在内部使用一些常量是一个实现细节。
实现常量接口会使此实现细节泄漏到类的导出API中。对类的用户而言,该类实现一个常量接口并不重要。实际上,这甚至可能使他们感到困惑。更糟糕的是,它表示一种承诺:如果在将来的版本中对该类进行了修改,使其不再需要使用常量,则它仍必须实现该接口以确保二进制兼容性。如果非最终类实现了常量接口,
其所有子类的名称空间都会被接口中的常量污染。