Effective Java - 避免不必要地使用受检异常

2022-08-30  本文已影响0人  DZQANN

第71条 避免不必要地使用受检异常

  1. 抛出受检异常的方法无法直接在流中使用

  2. 消除受检异常的最简单方法是返回所需结果类型的Optional

  3. 可以使用判断的方式消除异常

    try {
        obj.action(args);
    } catch (TheCheckedException e) {
        ... // Handle exceptional condition
    }
    
    if (obj.actionPermitted(args)) {
        obj.action(args);
    } else {
        ... // Handle exceptional condition
    }
    

    虽然后者的调用序列没有前者的漂亮,但是这样得到的 API 更加灵活

  4. 如果调用者无法从失败的执行情况恢复,则抛出未受检异常。如果可能恢复至正常状态,并且希望强制调用者处理异常情况,首先考虑返回 Optional。只有在失败的情况下提供的信息不足时才应该抛出一个受检异常

思考

  1. 直接抛出异常最大的优势就是可以跨越很多层直接传输异常。比如可能最外层向里调用了5层函数才走到了数据校验没有通过的状态(正常来说肯定简单的校验可以直接在最外层做,比如DB、网络访问外部接口这些可能是在底层执行的过程中发现数据不对了),这个时候如果想要把当前的异常状态返回给最外层,要跨越5层,而如果是抛异常,就可以直接在最外层进行trt-catch
  2. 如果数据有问题没有必要返回null,如果肯定会在后面发生空指针,应该尽早的抛出,这样可以给后面查问题提供一点便利性
上一篇 下一篇

猜你喜欢

热点阅读