把常量定义在接口中,要用到的类里实现它,就可以直接用这些常量
EffectiveJava第17条对这种方式提出反对,理由如下
1.接口被用作一个类型,通过此类型可以引用这个类的实例,为了其他目的定义接口不合适。
2.类中使用常量,这是实现细节,实现常量接口后,把这个实现细节泄漏到该类的API中,对类的用户也没有价值
3.将来中类不需要这些常量了,仍必须实现这个接口,以保证兼容性。
4.常量在编译时编译器会进行inline优化。接口变量会导致哪怕你更改了变量值也必须重新编译引用该接口的的类
5.一个非final类实现一个常量接口,它的所有子类的名字空间会被接口中的常量污染
可选择的方法:
1.如果这些常量与类或接口联系比较紧密,应该把常量添加到类或接口中 如 Integer里的MIN_VALUE MAX_VALUE
2.枚举类,类型安全
3.static import
import static java.lang.Math.PI;
(适用场合:use it when you require frequent access to static members from one or two classes. 引多了也不好,影响可读性)
4.用不可实例化的工具类