SONAR 扩展异常或 RuntimeException?

SONAR extend Exception or RuntimeException?

我有一个自定义异常 class 写成

 public class MyCustomException extends RuntimeException {
    public MyCustomException(Throwable cause) {
        super(cause);
      }

        enter code here

      /**
       * @param message
       * @param cause
       */
      public MyCustomException(String message, Throwable cause) {
        super(message, cause);
      }
    }

在我的 serviceImpl 层

 @Override
        public List<SiteDetails> getSite() throws MyCustomException {
    }

SONAR(Ecplise IDE linting 插件)状态:

Remove the declaration of thrown exception '.MyCustomException' which is a runtime exception

我应该删除声明还是应该在 MyCustomException class 中扩展 Exception 而不是 RunTimeException

声纳问题主要基于意见。
RuntimeException 没有被强制处理和声明,但在记录这种情况的方法中声明它并不是一个坏习惯。

Should I remove the declaration or should I extend Exception in MyCustomException class instead of RuntimeException

如果您认为 MyCustomException 是必须由客户端处理的异常,则 MyCustomException 应该派生自 Exception 而不是 RuntimeException

否则,如果在大多数情况下客户端无法处理异常,则应删除声明以使 Sonar Happy 或将此问题标记(至少尝试)为误报,如果您认为这样做是有意义的传达异常,即使它是 RuntimeException.

我有同样的情况,你必须捕获运行时异常,在我的例子中是一个数组越界异常,因为我正在解析一个与特殊字符值分开的字符串,但有时字符串值不对应正确的约定,对吧?所以我必须处理它,但 Sonar 以同样的原因指责我! ArrayIndexOutOfBoundsException 派生自运行时异常 , 无论如何,一旦你知道你的代码块可以检索一些运行时异常,而不是直接抛出它,使用一个 catch 块并在其中抛出你的自定义异常。

catch (ArrayIndexOutOfBoundsException e) {
     throw new YourCustomException("your message",e);
}

通过这种方式,您可以删除方法上的 throws 签名,Sonar 会很高兴