![](/img/trans.png)
[英]Final static variable initialized in static block using method that throws exception
[英]Making sure that a final variable is initialized when a constructor throws an exception
我有一个最终的会员数据:
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;
}
}
如果内部对象的构造函数失败,我不评论继续构建外部 object 是否有意义......
final Foo foo ;
Foo foo_temp = null ;
try {
foo_temp = new Foo();
} catch (Exception e) {
e.printStackTrace();
} finally {
foo = foo_temp ;
}
也许我不明白,但我没有得到错误。 请注意,ConTest 的构造函数抛出 Foo 引发的异常。 这对我来说是最优雅的(回答你的问题。)如果 Foo 无法初始化,是不是出了什么大问题?
竞赛.java:
public class ConTest {
public final Foo foo;
public ConTest() throws Exception {
foo = new Foo(3);
}
}
Foo.java:
public class Foo {
public Foo(int i) throws Exception {
if (i < 0) throw new Exception("yah");
}
}
一切都很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.