对于Java接口中的常量,"public static final"是多余的吗?

gav*_*koa 41 java static final interface jls

这段代码:

interface Config {
    int MAX_CONN = 20;
}
Run Code Online (Sandbox Code Playgroud)

编译和按我的预期工作.它看起来像是:

interface Config {
    public static final int MAX_CONN = 20;
}
Run Code Online (Sandbox Code Playgroud)

对于Java接口中的常量,"public static final"是多余的吗?这对于Java 1.1,1.2,1.3,1.4,...,1.8是否适用,或者是否在Java版本中进行了更改?

NIN*_*OOP 60

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

接口主体中的每个字段声明都是隐式的public,static和final.允许为这些字段冗余地指定任何或所有这些修饰符.

阅读JLS以了解为何完成此操作.

看看这个SO答案:

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


小智 5

接口:系统需求服务。

在接口中,变量默认由 public、static、final 访问修饰符分配。因为 :

public :有时接口可能会放在其他包中。所以它需要从项目的任何地方访问变量。

static :因此不完整的类不能创建对象。所以在项目中我们需要访问没有对象的变量,以便我们可以在帮助下访问

interface_filename.variable_name
Run Code Online (Sandbox Code Playgroud)

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