是否可以通过从该对象的构造函数调用的私有(private)方法为最终属性设置值?
public class FinalTest {
private final Object a;
//Constructor
public FinalTest() {
setA();
}
private void setA() {
a = new Object;
}
}
对于上面的类,编译器给我一个错误,说我不能从方法中设置 'a' 的值。
我知道不可能从构造函数外部为最终变量设置值,但在上述情况下,我实际上是在构造函数中以某种方式进行的。那么为什么不允许这样做呢?
最佳答案
这是不允许的,因为您可以稍后通过一些其他非构造函数方法调用 setA()
,这将违反最终保护。由于 final 是编译时强制执行的操作,因此编译器通过强制在构造函数或内联中进行初始化来强制执行 final。
在您的简单示例中,一切看起来都不错,但是如果您稍后将您的类更新为如下所示,问题就会变得更加明显...
public class FinalTest {
private final Object a;
//Constructor
public FinalTest() {
setA();
}
private void setA() {
a = new Object;
}
public void doSomething() {
this.setA(); // not good because a is final
}
}
关于java - 设置最终类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5582011/