标记接口,实现与导入

时间:2012-07-11 14:16:56

标签: java oop

如果我有一个简单的标记接口(不包含任何方法),其中包含整个应用程序中使用的常量,导入接口的类和实际实现接口之间有什么区别吗?

接口:

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);
    }
}

2 个答案:

答案 0 :(得分:3)

实施它将是一种反模式:

  

在Java编程语言中,常量接口模式   描述了仅用于定义常量的接口的使用,以及   有类实现该接口以实现方便   对这些常量的语法访问。但是,因为常数很大   通常只是一个实现细节,并实现了接口   一个类是其导出的API的一部分,这种做法相当于   将实现细节放入API,这被考虑   不当。 [1] [2]一般来说,收集系统常数   独立于行为的类,可能会造成面向对象的不良   设计,因为它往往是低凝聚力的标志。这是为了这些   实现常量接口的原因被认为是一个   反模式。

http://en.wikipedia.org/wiki/Constant_interface

关于标记界面,您可以查看here

答案 1 :(得分:1)

如果要将标记类实际上具有特定属性,我只会将其称为标记接口,在这种情况下,它们必须实现instanceof检查的接口才能工作。如果它只是作为常量的一个方便的位置,那么我不会把它称为标记接口,我不会有任何类实现它,因为它正在向实现类的公共面添加一些东西,它只是一个实现细节。 / p>