Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是";公开静态决赛“;Java接口中的常量是否冗余?_Java_Interface_Static_Final_Jls - Fatal编程技术网

是";公开静态决赛“;Java接口中的常量是否冗余?

是";公开静态决赛“;Java接口中的常量是否冗余?,java,interface,static,final,jls,Java,Interface,Static,Final,Jls,此代码: interface Config { int MAX_CONN = 20; } 按照我的预期编译和工作。看起来这与: interface Config { public static final int MAX_CONN = 20; } 对于Java接口中的常量,“publicstaticfinal”是多余的吗?Java 1.1、1.2、1.3、1.4、…、1.8是这样吗?还是它在Java版本中发生了更改?接口中声明的变量隐式地公共静态final。这是说: 接口主体

此代码:

interface Config {
    int MAX_CONN = 20;
}
按照我的预期编译和工作。看起来这与:

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

对于Java接口中的常量,“publicstaticfinal”是多余的吗?Java 1.1、1.2、1.3、1.4、…、1.8是这样吗?还是它在Java版本中发生了更改?

接口中声明的变量隐式地
公共静态final
。这是说:

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

阅读JLS,了解为什么会这样做

看看这个:


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


接口
变量
是隐式的
静态的
最终的
,因为Java接口不能单独实例化

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


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

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

如果必须将
接口
重构为类,则保留冗余的
公共静态final
可能更为实际。(这听起来很奇怪,因为每个IDE都将这些标记为冗余信息)

公平地说,编辑是不可能做到的:如果不更改许多其他位置(因为接口使用
实现
,而从类继承使用
扩展


编辑#2事实上,常量接口可以被视为反模式,请参见

接口:系统需求服务

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

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

静态:因此,不完整的类无法创建对象。所以在项目中,我们需要访问不带对象的变量,这样我们就可以在

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