Sonar 在捕获泛型类型Exception时会抱怨,但有时我们需要对所有(甚至尚未识别)异常类型进行一些常规异常处理。通过这次声纳检查的解决方案是什么?
除非您调用 throws 的方法Exception,否则无需 catch Exception:捕获您知道的异常,编译器会告诉您何时必须开始处理另一个异常。
捕获“尚未识别”的问题Exception是您丢失了必须以特殊方式处理新异常的信号。
例如:
void someMethod() {
// Do stuff.
}
void callIt() {
try {
someMethod();
} catch (Exception e) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如果someMethod现在被更改,以便它抛出,比如说,一个InterruptedException:
void someMethod() throws InterruptedException {
Thread.sleep(1000);
// Do stuff.
}
Run Code Online (Sandbox Code Playgroud)
编译器不会告诉你需要添加处理InterruptedExceptionin 的处理callIt(),因此您将默默地接受中断,这可能是问题的根源。
相反,如果您捕获了RuntimeException, 或RuntimeException | IOException | OtherExceptionYouAlreadyKnowAbout,编译器会标记您必须更改代码才能处理该问题InterruptedException;或者,您无法更改 的签名someMethod(),并且必须在那里处理已检查的异常。