对于 Java 接口中的常量,“公共静态最终”是多余的吗?

2022-08-31 20:36:06

此代码:

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 发行版中发生了变化?


答案 1

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

接口主体中的每个字段声明都是隐式公共的、静态的和最终的。允许为此类字段冗余指定任何或所有这些修饰符。

通读JLS以了解为什么这样做。

看看这个SO答案

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


答案 2

接口:系统需求服务。

在接口中,变量默认由公共,静态,最终访问修饰符分配。因为:

公共:有时,接口可能会放在其他软件包中。因此,它需要从项目中的任何地方访问变量。

静态的:由于这样不完整的类不能创建对象。因此,在项目中,我们需要访问没有对象的变量,以便我们可以在

interface_filename.variable_name

最后:假设一个接口由多个类实现,并且所有类都尝试访问和更新接口变量。因此,它会导致数据变化不一致,并影响所有其他类。因此,它需要使用 final 声明访问修饰符。


推荐