最近,我看到很多(商业)代码抛出和捕获完全相同的异常,类似于下面的代码:
public class Foo {
public void bar() throws AnException {
// do something (1)
try {
// do something (2) -- able to throw AnException
} catch (AnException ex) {
throw ex;
}
// do something (3)
}
}
对比一下:
public class Foo {
public void bar() throws AnException {
// do something (1)
// do something (2) -- able to throw AnException
// do something (3)
}
}
前者在行为、语义或其他方面是否真的完成了任何事情?它会对代码性能(时间和空间)产生任何影响还是有助于提高可读性?
附言这个问题与this question非常不同.
编辑:前者中的 catch
block 除了重新抛出捕获的异常外没有做任何其他事情。
最佳答案
这违反了基本规则:
The code should catch only the exceptions that it knows how to handle.
Oracle 的指南建议每次抛出异常时,您都应该为捕获异常的代码提供一些有用的信息(请参阅 Effective Java Exceptions 的第 3 页)。捕获异常只是为了重新抛出它没有任何实际意义,因为没有为调用链中它上面的代码添加额外的信息,也没有由方法本身提取的信息。
关于java - 捕获并重新抛出完全相同的异常有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419928/