Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sonarqube-避免捕获泛型异常_Java_Sonarqube - Fatal编程技术网

Java Sonarqube-避免捕获泛型异常

Java Sonarqube-避免捕获泛型异常,java,sonarqube,Java,Sonarqube,Sonar在捕获泛型类型异常时会发出抱怨,但有时我们需要对所有(甚至尚未识别)异常类型执行一些常规异常处理。通过此声纳检查的解决方案是什么?除非您调用抛出异常的方法,否则无需捕获异常:捕获您知道的异常,编译器将告诉您何时必须开始处理另一个异常 捕获“尚未识别”异常的问题在于,您丢失了必须以特殊方式处理新异常的信号 例如: void someMethod() { // Do stuff. } void callIt() { try { someMethod(); } catc

Sonar在捕获泛型类型异常时会发出抱怨,但有时我们需要对所有(甚至尚未识别)异常类型执行一些常规异常处理。通过此声纳检查的解决方案是什么?

除非您调用抛出异常的方法,否则无需捕获异常:捕获您知道的异常,编译器将告诉您何时必须开始处理另一个异常

捕获“尚未识别”
异常的问题在于,您丢失了必须以特殊方式处理新异常的信号

例如:

void someMethod() {
  // Do stuff.
}

void callIt() {
  try {
    someMethod();
  } catch (Exception e) {
    // ...
  }
}
如果现在更改了
someMethod
,使其抛出一个
中断异常

void someMethod() throws InterruptedException {
  Thread.sleep(1000);
  // Do stuff.
}
编译器没有告诉您需要为
callIt()
中的
InterruptedException
添加处理,因此您将默默地接受中断,这可能是问题的根源


相反,如果您捕获了
RuntimeException
,或
RuntimeException | IOException | otherexception您已经了解了
,编译器将标记您必须更改代码才能处理该
中断异常
;或者,您无法更改
someMethod()
的签名,并且必须在此处处理选中的异常。

忽略警告?使用RuntimeException可以解决这个问题,但我认为RuntimeException是通用的,遵循Sonar单独处理异常的思想。在我的具体例子中,我使用Jaxb来解组XML字符串。编译器只告诉我JAXBException,但现在当XML字符串的值中包含类似&foo(不带分号)的内容时,异常是com.ctc.wstx.exc.WstxLazyException。@纳德它也是通用的,但它是未经检查的异常:您实际上不打算尝试(或能够)以有意义的方式从中恢复,因为它表示编程错误。仅仅说“嗯,发生了一个问题;不要拆毁这个世界,但是没有什么可以做的”是合理的。另一方面,选中的异常表示您应该能够执行一些恢复操作(例如重试,因为我只是在这次调用中被中断了,下次可能会成功)。解释得很好!我没有意识到检查/未检查。谢谢。@Nader您可能需要阅读