Java接口中的常量的“公共静态最终”是否多余?


问题内容

这段代码:

interface Config {
    int MAX_CONN = 20;
}

编译并按预期工作。看起来这与以下内容相同:

interface Config {
    public static final int MAX_CONN = 20;
}

Java接口中的常量的“公共静态最终”是否多余?Java 1.1、1.2、1.3、1.4,…,1.8是否适用于Java,或者在Java版本中已更改?


问题答案:

在Interface中声明的变量是隐式的public static final。这就是JLS
9.3
所说的:

接口主体中的每个字段声明都是隐式的 public,static和final 。可以为此类字段多余地指定任何或所有这些修饰符。

通读JLS以了解执行此操作的原因。

看看这个SO答案:

接口变量是静态的,因为不能单独实例化Java接口。必须在没有实例的静态上下文中分配变量的值。final修饰符确保分配给接口变量的值是一个真正的常量,不能由程序代码重新分配。