2

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

界面:

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

2 回答 2

3

实现它将是一个反模式:

在 Java 编程语言中,常量接口模式描述了仅使用接口来定义常量,并让类实现该接口以实现对这些常量的方便语法访问。但是,由于常量通常只是一个实现细节,而一个类实现的接口是其导出 API 的一部分,这种做法相当于将实现细节放入 API 中,这被认为是不合适的。[1][2] 通常,将系统常量收集到与行为无关的类中,可能会造成糟糕的面向对象设计,因为它通常是低内聚的标志。正是由于这些原因,实现常量接口被认为是一种反模式。

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

关于标记界面,您可以在此处查看

于 2012-07-11T14:22:22.060 回答
1

如果它实际上打算将类标记为具有特定属性,我只会将其称为标记接口,在这种情况下,它们必须实现该接口才能进行instanceof检查。如果它只是为了方便放置常量,那么我不会称它为标记接口,也不会有任何类实现它,因为它向实现类的公共面添加了一些东西,这只是一个实现细节。

于 2012-07-11T14:21:15.043 回答