java如何正确处理多个异常抛出器对象
我希望在更高的级别上处理异常,而不是在这个方法中,但我希望确保对象a&;b正确关闭
close()方法也可以引发异常
此模板是适合此问题的解决方案还是有更智能/更简单的解决方案
public void foo() throws Exception {
A a = null;
B b = null;
try {
a = new A();
b = new B();
...
} catch(Exception e) {
throw e;
}
finally {
Exception ex = null;
try {
if (a != null)
a.close();
} catch(Exception x){
ex = x;
}
try {
if (b != null)
b.close();
} catch(Exception x) {
ex = x;
}
if (ex != null)
throw ex;
}
# 1 楼答案
这个问题的正确解决方案(在C#)是
using
语句:这确保了当控件离开块时
a
和b
都是Dispose
# 2 楼答案
try
块不需要catch
块,它需要catch
或finally
块(或两者兼有)# 3 楼答案
除了Femaref所说的之外,您还可以创建一个helper方法,使用一个或多个可关闭的对象,并在必要时抛出异常。只是为了减少冗余
通常希望返回原始错误消息,而不是在
close
调用期间发生的错误消息。后者可能会直接从前者开始,但你需要前者才能找到问题的真正原因# 4 楼答案
我只看到一个小问题:如果
a.close()
和b.close()
都失败了,那么a.close()
的异常就会丢失,因为您重用了ex
您可以使用记录器来持久化异常消息——在这种情况下,只在finally块中抛出任何异常就足够了,因为您已将错误消息保存在日志文件中