首页 > 解决方案 > 接口与单例中的全局变量

问题描述

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

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

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

标签: javainterfacesingletonglobal-variables

解决方案


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

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

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

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

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

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


推荐阅读