You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//常量接口反例-不要这样用publicinterfacePhysicalConstants {
// Avogadro's number (1/mol)staticfinaldoubleAVOGADROS_NUMBER =
6.022_140_857e23;
// Boltzmann constant (J/K)staticfinaldoubleBOLTZMANN_CONSTANT =
1.380_648_52e-23;
// Mass of the electron (kg)staticfinaldoubleELECTRON_MASS = 9.109_383_56e-31;
}
更多链接
###Item 22 仅仅使用接口来定义类型
当一个类实现了一个接口时,这个接口就被当作一个可以引用该类对象的类型在使用。因此类实现了哪个接口,就能调用哪个接口的方法。
用接口类定义其他事情都是不恰当。
有一种失败的接口是常量接口。这样的接口没有包含任何方法,仅仅包含一些static final的常量。这里有个例子:
这个常量接口是对接口的不良用法。类使用的什么常量属于内部的实现细节。但是当类实现一个常量接口时,就会导致类的内部实现细节被暴漏到类导出的API中。对用户来说,类实现常量接口不但用处不大而且容易造成混乱。更糟糕的是,常量接口代表了一个承诺:如果将来类被修改成不再需要使用这些常量,但它为了二进制兼容还必须继续实现这个接口,这很痛苦。如果一个非final的类实现了常量接口,那么它子类的命名空间就可能被这些常量污染。
在JAVA平台库中有几个常量接口存在,例如java.io.ObjectStreamConstants.这些接口应该被视为不规则的不应该被效仿的接口。
如果你想导出常量,有几种合理的选择。
通常使用工具类调用常量时要求用类名.常量名,例如PhysicalConstants.AVOGADROS_NUMBER.但是如果你大量的使用常量时,可以通过导入工具类来直接使用常量:
总结:接口应该仅被用于定义类型,而不应该用于仅仅导出常量。
The text was updated successfully, but these errors were encountered: