此代码:
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版本中进行了更改?
答案 0 :(得分:57)
在Interface中声明的变量是隐式public static final
。这就是JLS 9.3所说的:
界面正文中的每个字段声明都隐式 public,static和final 。允许为这些字段冗余地指定任何或所有这些修饰符。
通读JLS以了解为何完成此操作。
看看这个SO answer:
接口变量是静态的,因为Java接口本身无法实例化;必须在没有实例的静态上下文中分配变量的值。最终修饰符确保分配给接口变量的值是一个真正的常量,不能由程序代码重新赋值。
答案 1 :(得分:3)
接口variables
隐含static
和final
,因为Java接口无法自行实例化。
接口是使用interface关键字声明的,并且可能只包含方法签名和常量声明(声明为静态和最终的变量声明)。接口可能永远不会包含方法定义。
答案 2 :(得分:3)
接口:系统需求服务。
在接口中,变量默认是由public,static,final访问修饰符分配的。因为:
public:有时接口可能会放在其他软件包中。因此,它需要从项目中的任何位置访问变量。
静态:这样的不完整类无法创建对象。因此,在项目中,我们需要访问没有对象的变量,以便我们可以借助
interface_filename.variable_name
最终:假设一个接口由许多类实现,并且所有类都尝试访问和更新接口变量。因此,这会导致数据更改不一致并影响其他所有类。因此,需要使用final声明访问修饰符。
答案 3 :(得分:2)
接口变量是静态的,因为Java接口本身无法实例化。必须在静态上下文中分配变量的值 - 不存在实例。最终修饰符确保分配给接口变量的值是一个真正的常量,不能由程序代码重新赋值。
答案 4 :(得分:1)
接口变量始终是静态的和最终的。
答案 5 :(得分:0)
如果必须将interface
重构为一个类,则保留冗余public static final
可能更为实用。 (这听起来很奇怪,因为每个IDE都将其标记为冗余信息。)
编辑:公平地说:如果不更改许多其他位置,就不会这样做(因为接口正在使用implements
,而从类继承则使用extends
)>
EDIT#2 实际上,常量接口可以看作是反模式,请参见wikipedia - Constant Interface