避免使用异常作为流程控制

Avoid using exceptions as flow control

我的声纳违规听起来像 "Avoid using exceptions as flow control."

我想知道根据最佳实践重写此代码的最佳方法是什么

try { 
} catch(SomeCheckedException ex) {
      throw (SomeRuntimeException) ex.getCause();
}

这是一种设计味道,sonar 识别的模式与您的代码匹配,如果您期望在正常流程中会发生某些事情,然后抛出异常而不是处理错误并提供适当的 return 而不是向调用者抛出另一个异常。

这不是最佳的一个原因是异常处理比在预期的错误情况下简单地 returning null(例如)要慢得多。此外,您的软件应提供明确的 API,不应以异常为中心。