Java 标记接口,实现vs导入

Java 标记接口,实现vs导入,java,oop,Java,Oop,如果我有一个简单的标记接口(不包含任何方法),其中包含在整个应用程序中使用的常量,那么导入接口的类和实际实现接口之间有什么区别吗 接口: public interface MyConstants { String constant1 = "constant1"; String constant2 = "constant2"; } 实施: public class MyClass implements MyConstants { public MyClass(){

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

接口:

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

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

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

implement它将是一个反模式:

在Java编程语言中,常量接口模式 描述仅用于定义常量的接口的使用,以及 让类实现该接口以实现方便的 对这些常量的语法访问。但是,由于常数非常小 通常只是一个实现细节,以及实现的接口 如果类是其导出API的一部分,则这种做法相当于 将实现细节放入API中 不恰当的[1] [2]通常,将系统常数收集到 独立于行为的类,可能会创建较差的面向对象 设计,因为它通常是低内聚性的标志。是为了这些 实现常量接口被认为是一个问题的原因 反模式


关于标记接口,您可以检查它。

实现它将是一种反模式:

在Java编程语言中,常量接口模式 描述仅用于定义常量的接口的使用,以及 让类实现该接口以实现方便的 对这些常量的语法访问。但是,由于常数非常小 通常只是一个实现细节,以及实现的接口 如果类是其导出API的一部分,则这种做法相当于 将实现细节放入API中 不恰当的[1] [2]通常,将系统常数收集到 独立于行为的类,可能会创建较差的面向对象 设计,因为它通常是低内聚性的标志。是为了这些 实现常量接口被认为是一个问题的原因 反模式


关于标记接口,您可以检查它。

这是工作中的常量接口反模式。这不是标记接口,而是常量接口。更不用说如果您想要方便、无范围的访问,您可以始终使用静态导入。我要说的是,实现一个接口只是为了获取常量是一种糟糕的形式。这是常量接口反模式。这不是一个标记接口,而是一个常量接口。更不用说,如果您想要方便、无范围的访问,您可以始终使用静态导入。我想说,实现一个接口只是为了获取常量是一种糟糕的形式。