我有最终的成员(member)数据:
public final Foo foo;
在构造函数中,foo
初始化如下:
foo = new Foo();
现在,不幸的是,Foo 的构造函数可能会抛出异常:
try {
foo = new Foo();
} catch (Exception e) {
e.printStackTrace();
}
但现在编译器提示 foo 可能未初始化,如果 Foo 的构造函数抛出异常,则情况属实。但是如果我将 foo = null
放在 catch 大括号内,它会提示 foo 可能已被初始化。
Foo 是一个我无法修改的第三方库。
那么,处理这个问题最优雅的方式是什么?
最佳答案
foo = createFoo();
...
private static Foo createFoo() {
try {
return new Foo();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
如果内部对象的构造函数失败,我不会评论继续构造外部对象是否有意义......
关于java - 确保当构造函数抛出异常时最终变量被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078629/