常量接口模式很少使用接口 。类在内部使用某些常量是一个实现细节。实现常量接口会导致该实现细节泄漏到类的导出 API 中。类实现常量接口对于类的用户来说是无关紧要的。事实上,这甚至会让他们感到困惑。更糟糕的是,它代表了一种承诺: 如果在将来的发行版中,类被修改为不再需要使用常量,那么它仍然必须实现接口以确保二进制兼容性。如果一个非 final 类实现了一个常量接口,那么它的所有子类的名称空间都会受到接口中常量的污染。
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
对
public interface Constants {
double PI = 3.14159;
double PLANCK_CONSTANT = 6.62606896e-34;
}