在自定义异常中组合多个异常:优化

时间:2015-11-20 08:54:34

标签: exception exception-handling java-8 custom-exceptions

我有几个类似的方法,并且调用如下:

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. 如何(如果)将所有这三个放在一个自定义异常中?
  2. 除了(1)之外,有没有办法优化代码,这样我就不需要为多个方法编写完整的相同语句了?

1 个答案:

答案 0 :(得分:1)

从Java 7开始,您可以使用多捕获块:

catch (NullPointerException | InterruptedException | TimeoutException e) {
    e.printStackTrace();
    log more details...
}

那就是说,你永远不应该捕获NullPointerException:这是一个bug,如果它发生了,那么异常应该冒出来。你无法合理地期待 NPE发生。

此外,对于InterruptedException和其他异常做同样的事情也是非常可疑的。捕获InterruptedException时,应该重置当前线程上的中断标志,并尽快停止正在进行的操作。