gpt4 book ai didi

java - 为什么编译器说接口(interface)中的公共(public)静态字段是 "final"尽管它不是

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:58 24 4
gpt4 key购买 nike

请看下面的代码——

public interface TestInterface {
public static String NON_CONST_B = "" ;
}

public class Implemented implements TestInterface {
public static String NON_CONST_C = "" ;
}

public class AutoFinal {

public static String NON_CONST_A = "" ;

public static void main(String args[]) {
TestInterface.NON_CONST_B = "hello-b" ;
Implemented.NON_CONST_C = "hello-c";
AutoFinal.NON_CONST_A = "hello-a" ;
Implemented obj = new Implemented();
}
}

但是,编译器提示 TestInterface.NON_CONST_B 是最终的 --

AutoFinal.java:6: error: cannot assign a value to final variable NON_CONST_B
TestInterface.NON_CONST_B = "hello-b" ;
^
1 error

为什么?

最佳答案

关于:

public interface TestInterface {
public static String NON_CONST_B = "" ;
}

public class AutoFinal {
public static void main(String args[]) {
TestInterface.NON_CONST_B = "hello-b" ;
// ....
}
}

However, the compiler complains that TestInterface.NON_CONST_B is final --


但事实上,无论您是否显式声明它,它都是最终的,因为它是在接口(interface)中声明的。接口(interface)中不能有非最终变量(非常量)。它也是公共(public)和静态的,无论是否已明确声明为公共(public)静态。

根据 JLS 9.3 Interface Field (Constant) Declarations :

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

关于java - 为什么编译器说接口(interface)中的公共(public)静态字段是 "final"尽管它不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com