是否有可能懒惰地实例化最终字段?
以下代码无法编译:
public class Test{
private final Connection conn;
public Connection getConnection(){
if(conn==null){
conn = new Connection();
}
return conn;
}
}
Run Code Online (Sandbox Code Playgroud)
还有其他选择吗?
不是.最终字段的要点是它在构造期间设置一次,之后永远不会改变.conn在您的情况下,编译器或VM如何知道任何有用的东西?怎么会知道只有那个属性应该能够设置它,而不是其他方法呢?
也许如果你解释了你想要的语义,我们可以想出一个替代品.您可能有一个"提供者"接口,表示获取值的方式,然后MemoizingProvider代理另一个提供者,但只有一次,否则缓存该值.这也无法为缓存值设置最终字段,但至少它只能在一个地方.
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |