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

Combining Multiple Exceptions in Custom Exception : Optimization

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

methodThrowingException() throws NullPointerException, InterruptedException, TimeoutException {
 <method logic>
}

正在呼叫 class:

 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 开始,您可以使用 multi-catch 块:

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

就是说,你永远不应该捕获 NullPointerException:这是一个错误,如果它发生了,异常应该冒出来。您不能合理地期望 NPE 发生。

此外,对 InterruptedException 做与其他异常相同的事情也很可疑。当捕获到 InterruptedException 时,您应该重置当前线程上的中断标志,并尽快停止您正在做的事情。