有什么方法可以强制类在Java中使用public static final字段?

ser*_*erg 6 java inheritance class

有没有办法强制Java中的类具有公共静态最终字段(通过接口或抽象类)?或者至少只是一个公共领域?

我需要以某种方式确定一组课程

public static final String TYPE = "...";

在他们中.

Boz*_*zho 7

不,你不能.

您只能强制它们使用非静态getter方法,该方法将为每个子类返回适当的值:

public abstract String getType();
Run Code Online (Sandbox Code Playgroud)

如果你需要将某个子类的每个子类映射到一个值,而不需要实例化它,你可以创建一个public static Map<Class<?>, String> types;地方,用所有类及其类型静态填充它,并通过调用获取类型TypesHolder.types.get(SomeClass.class)


Kan*_*ath 5

您可以定义如下界面:

interface X {
   public static final String TYPE = "...";
}
Run Code Online (Sandbox Code Playgroud)

并且您可以使类实现该接口,然后该接口将具有在接口中声明的相同值的字段.请注意,这种做法称为Constant接口反模式.

如果您希望类具有不同的值,那么您可以在界面中定义一个函数,如下所示:

interface X {
   public String getType();
}
Run Code Online (Sandbox Code Playgroud)

并且实现类必须实现可以根据需要返回不同值的函数.

注意:这与抽象类的工作方式类似.