Sonar 说我在界面中有多余的 throw

Sonar says i have a redundant throw in an interface

我在接口中定义了一个函数,该函数抛出 我自己的异常。当我 运行 Sonar 时,它说这是一个多余的抛出。我该如何解决这个小问题?

这是函数的定义:

OwnBean getOwnBean(Integer code1, String code2) throws OwnBeanException;

感谢您的帮助!

更多信息:

我已经设法获得了有关此的更多信息。

异常是其他异常的后代,最后是 Exception 的后代。

我收到的消息是"Unable to obtain the information of class OwnBeanException"

我想说,最可能的解释是您的 OwnBeanException 扩展了 RuntimeException,这可以解释为什么它是多余的。 RuntimeExceptions(包括所有 类 扩展它)根据定义未经检查,通过 throws 声明它们没有意义。

所有可能性,根据documentation

An exception in a throws declaration in Java is redundant if:

  • It is listed multiple times
  • It is a subclass of another listed exception
  • It is a RuntimeException, or one of its descendants

从技术上讲,任何扩展 RuntimeException 的异常都不必在 throws-declaration 子句中声明。因此 throws 声明可以认为是多余的。

但是:

在 Spring-Framework 中,您会看到许多带有 throws 声明的方法,用于扩展 RuntimeException 的异常。

  • Spring 避免检查异常。
  • 对于使用它的程序员来说 - 更容易看出可以抛出哪些未经检查的异常。

示例: org.springframework.web.client.RestTemplate class 方法:

@Override
public void delete(URI url) throws RestClientException {
    execute(url, HttpMethod.DELETE, null, null);
}

其中:

public class RestClientException extends NestedRuntimeException {
    // ...
} 

我个人主张声明未经检查的异常,因为这对程序员来说更容易。