如何在java中从多个接口访问常量



我有两个接口,它们都使用这两个常量

static final File UPLOAD_DIR = new File(System.getProperty("catalina.home") + File.separator + "uploads");
static final String UPLOAD_DIR_ABSOLUTE_PATH = UPLOAD_DIR.getAbsolutePath() + File.separator;

如何在不初始化两个接口的情况下访问它们?我是否创建一个最顶层的接口(但这两个接口不共享任何方法(?

您可以这样做:

public interface MyConstants {
public static final File UPLOAD_DIR = 
new File(System.getProperty("catalina.home") +
File.separator + "uploads");
public static final String UPLOAD_DIR_ABSOLUTE_PATH = 
UPLOAD_DIR.getAbsolutePath() + File.separator;
}
public interface InterfaceA extends MyConstants {
...
}
public interface InterfaceB extends MyConstants {
...
}
public class Test implements InterfaceA, InterfaceB {
// Use UPLOAD_DIR
}

请注意,类通过多个路由继承接口的常量声明是合法的Java。

(是否在接口常量声明中使用修饰符取决于个人品味或风格。根据JLS,它们是隐式publicstaticfinal;请参见JLS 9.3。(


但仅仅因为你可以做一些事情并不一定意味着你应该做。有些人考虑将仅由常量组成的接口声明为反模式。

阅读以下内容并下定决心:

  • 维基百科:恒定接口
  • 为什么应该禁止恒定界面模式
  • 恒定界面反模式澄清

最新更新