接口与单例中的全局变量



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

我可以创建一个包含变量的 Singleton 类,但我发现我可以简单地创建一个带有变量的接口(没有任何方法)。由于接口中的变量是静态的和最终的,这似乎是一个干净的实现。

我读到认为在接口中声明变量是糟糕的设计,那么为什么会这样,创建全局变量的最佳方法是什么?

根据声纳规则,仅使用接口来保存常量是一种代码异味:

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

根据《Effective Java》一书的作者Joshua Bloch的说法:常量接口模式是对接口的不良使用。

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

实现

常量接口会导致此实现详细信息泄漏到类的导出 API 中。对于类的用户来说,类实现常量接口无关紧要。事实上,它甚至可能使他们感到困惑。更糟糕的是,它代表了一个承诺:如果在将来的版本中修改了类,使其不再需要使用常量,它仍然必须实现接口以确保二进制兼容性。如果非最终类实现常量接口,

它的所有子类的命名空间都将被接口中的常量污染。

相关内容

  • 没有找到相关文章

最新更新