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

xt0899hw  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(199)

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

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;

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

roqulrg3

roqulrg31#

你可以这样做:

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
}

注意,类通过多个路由继承接口的常量声明是合法的。
(在接口常量声明中是否使用修饰符是个人喜好或风格的问题。根据jls的说法,它们是隐含的 public static final ; 见jls 9.3。)
但仅仅因为你能做某事并不意味着你就应该做。有些人认为声明一个仅由常量组成的接口是反模式。
请阅读以下内容,并做出自己的决定:
维基百科:常量接口
为什么不鼓励使用常量接口模式
恒定界面反模式澄清

相关问题