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 {
// ...
}
我个人主张声明未经检查的异常,因为这对程序员来说更容易。
我在接口中定义了一个函数,该函数抛出 我自己的异常。当我 运行 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 {
// ...
}
我个人主张声明未经检查的异常,因为这对程序员来说更容易。