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



我有一些类似的方法,调用如下:

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)有没有一种方法可以优化代码,这样我就不需要为多个方法编写完全相同的语句

由于Java 7,您可以使用多捕获块:

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

也就是说,您永远不应该捕获NullPointerException:这是一个错误,如果发生这种情况,异常应该会弹出。你不能合理地期望发生NPE。

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

最新更新