Java 如何正确处理多个异常抛出器对象
我不想用这个方法处理更高级别的异常,但我想确保对象a&b正确关闭 close()方法也可以引发异常 此模板是适合此问题的解决方案还是有更智能/更简单的解决方案Java 如何正确处理多个异常抛出器对象,java,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
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;
}
try
块不需要catch
块,它需要catch
或finally
块(或两者都需要)
try
块不需要catch
块,它需要catch
或finally
块(或两者兼有)。此问题的正确解决方案(在C中)是使用语句:
using(A a = new A())
using(B b = new B())
{
//...
}
这确保了当控件离开块时,a
和b
都是Dispose
d。此问题的正确解决方案(在C#)是使用
语句:
using(A a = new A())
using(B b = new B())
{
//...
}
这确保了当控件离开块时a
和b
都是Dispose
d。我只看到一个小问题:如果a.close()
和b.close()
都失败,那么a.close()
的异常就会丢失,因为您重用了ex
您可以使用记录器来持久化异常消息—在这种情况下,只在finally块中抛出任何异常就足够了,因为您已将错误消息保存在日志文件中 我只看到一个小问题:如果a.close()
和b.close()
都失败,那么a.close()
的异常就会丢失,因为您重用了ex
您可以使用记录器来持久化异常消息—在这种情况下,只在finally块中抛出任何异常就足够了,因为您已将错误消息保存在日志文件中
除了Femaref所说的之外,您还可以创建一个helper方法,该方法接受一个或多个可关闭的对象,并在必要时抛出异常。只是为了减少冗余
通常需要返回原始错误消息,而不是在close
调用期间发生的错误消息。后者可能直接从前者开始,但您需要前者才能找到问题的真正原因
除了Femaref所说的之外,您还可以创建一个helper方法,该方法接受一个或多个可关闭的对象,并在必要时抛出异常。只是为了减少冗余
通常需要返回原始错误消息,而不是在close
调用期间发生的错误消息。后者可能直接从前者开始,但您需要前者才能找到问题的真正原因
有什么原因会同时标记[c#]和[java]吗?通过对close方法进行错误检查,您会得到什么?为什么不进一步处理它们?为什么同时标记[c#]和[java]?通过对close方法进行错误检查,您得到了什么?为什么不进一步处理呢?