在Java接口中,对于常量来说,“public static final”是否多余?

53

这段代码:

interface Config {
    int MAX_CONN = 20;
}

编译并按照我的预期运行。看起来这与以下内容相同:

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

在Java接口中,使用"public static final"作为常量修饰符是否多余?这对于Java 1.1、1.2、1.3、1.4、...、1.8是否适用,或者在Java的哪个版本中发生了变化?

6个回答

69

在接口中声明的变量隐式地是public static final,这正如JLS 9.3所述:

  

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

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

看一下这个SO 答案

  

接口变量是静态的,因为 Java 接口本身不能被实例化;变量的值必须在不存在实例的静态上下文中分配。final 修饰符确保分配给接口变量的值是真正的常量,不能被程序代码重新分配。


5

接口:系统需求服务。

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

public:有时候接口可能放置在其他包中。因此,需要从项目的任何地方访问变量。

static:由于未完成的类无法创建对象,因此在项目中需要在没有对象的情况下访问变量,所以我们可以通过帮助进行访问。

interface_filename.variable_name

final: 假设一个接口被多个类实现,所有这些类都试图访问和更新该接口变量。这导致数据变化不一致并影响其他所有类。因此需要使用 "final" 关键字声明访问修饰符。


3

接口变量默认为静态常量,因为Java接口本身不能被实例化。

使用interface关键字声明接口,接口只能包含方法签名和常量声明(变量声明同时为静态和常量)。接口永远不可能包含方法定义。

http://en.wikipedia.org/wiki/Interface_(Java)


2

接口变量是静态的,因为Java接口本身无法实例化。变量的值必须在静态上下文中分配 - 不存在实例。final修饰符确保分配给接口变量的值是真正的常量,不能被程序代码重新分配。


1
接口变量始终是静态和最终的。

1
如果必须将接口重构为类,则保留冗余的public static final可能更实用,尽管每个IDE都将其标记为冗余信息,这听起来很奇怪。
编辑:公平地说:不更改许多其他地方不会这样做(因为接口使用implements,而从类继承使用extends
编辑#2:事实上,常量接口可以被认为是一种反模式,请参见wikipedia - Constant Interface

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接