Sal*_*gzi 4 java final immutability
是否可以从从该对象的构造函数调用的Private方法设置最终属性的值?
public class FinalTest {
private final Object a;
//Constructor
public FinalTest() {
setA();
}
private void setA() {
a = new Object;
}
}
Run Code Online (Sandbox Code Playgroud)
对于上面的类,编译器给出了一个错误,说我不能从方法中设置'a'的值.
据我所知,它不可能从一个构造函数之外的最后一个变量的设定值,但在上述情况下,我实际上做它在构造函数中的一种方式.那么为什么不允许这样做呢?
And*_*ite 10
这是不允许的,因为您可以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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2238 次 |
最近记录: |