我有一些类似的方法,调用如下:
methodThrowingException() throws NullPointerException, InterruptedException, TimeoutException {
<method logic>
}
呼叫类别:
try{
methodThrowingExceptions();
<some other logic>
}
catch (NullPointerException npx) {
npx.printStackTrace();
log more details...
}
catch (InterruptedException inx) {
inx.printStackTrace();
log more details...
}
catch (TimeoutException tox) {
tox.printStackTrace();
log more details..
}
- 我如何(如果)将这三个都放在一个自定义异常中
- 除了(1)有没有一种方法可以优化代码,这样我就不需要为多个方法编写完全相同的语句
由于Java 7,您可以使用多捕获块:
catch (NullPointerException | InterruptedException | TimeoutException e) {
e.printStackTrace();
log more details...
}
也就是说,您永远不应该捕获NullPointerException:这是一个错误,如果发生这种情况,异常应该会弹出。你不能合理地期望发生NPE。
此外,对InterruptedException和其他异常做同样的事情也是非常可疑的。当捕获InterruptedException时,您应该重置当前线程上的中断标志,并尽快停止正在执行的操作。