如果我有一个简单的标记接口(不包含任何方法),其中包含整个应用程序中使用的常量,导入接口的类和实际实现接口之间有什么区别吗?
接口:
public interface MyConstants {
String constant1 = "constant1";
String constant2 = "constant2";
}
实现:
public class MyClass implements MyConstants {
public MyClass(){
System.out.println(constant1);
}
}
导入:
import common.constants.MyConstants
public class MyClass {
public MyClass(){
System.out.println(MyConstants.constant1);
}
}
答案 0 :(得分:3)
实施它将是一种反模式:
在Java编程语言中,常量接口模式 描述了仅用于定义常量的接口的使用,以及 有类实现该接口以实现方便 对这些常量的语法访问。但是,因为常数很大 通常只是一个实现细节,并实现了接口 一个类是其导出的API的一部分,这种做法相当于 将实现细节放入API,这被考虑 不当。 [1] [2]一般来说,收集系统常数 独立于行为的类,可能会造成面向对象的不良 设计,因为它往往是低凝聚力的标志。这是为了这些 实现常量接口的原因被认为是一个 反模式。
http://en.wikipedia.org/wiki/Constant_interface
关于标记界面,您可以查看here。
答案 1 :(得分:1)
如果要将标记类实际上具有特定属性,我只会将其称为标记接口,在这种情况下,它们必须实现instanceof
检查的接口才能工作。如果它只是作为常量的一个方便的位置,那么我不会把它称为标记接口,我不会有任何类实现它,因为它正在向实现类的公共面添加一些东西,它只是一个实现细节。 / p>