我有一个自定义异常类,写为
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(用于linting的Ecplise IDE插件)声明:
删除抛出异常的声明&#39; .MyCustomException&#39;哪一个 是运行时异常
我应该删除声明,还是应该在Exception
课程而不是MyCustomException
扩展RunTimeException
?
答案 0 :(得分:1)
声纳问题主要是基于意见的问题
RuntimeException
不会被强制处理并如此声明,但在记录此案例的方法中声明它并不是一种坏习惯。
我应该删除声明还是应该扩展Exception MyCustomException类而不是RuntimeException
如果您认为MyCustomException
是必须由客户处理的例外情况,则MyCustomException
应来自Exception
而不是RuntimeException
。
否则,如果在大多数情况下客户端无法处理异常,您应该删除声明以使Sonar Happy或标记(至少尝试)此问题作为误报如果您认为传达有意义异常,即使它是RuntimeException
。
答案 1 :(得分:0)
我有同样的情况,您必须捕获运行时异常,在我的情况下是Array Out Of Bound异常,原因是我解析了一个与特殊char值分开的字符串,但有时该字符串值与右边的字符不对应约定,对吗?所以我必须处理它,但是Sonar出于同样的原因而责备我! ArrayIndexOutOfBoundsException从运行时异常派生 ,无论如何,一旦您知道自己的代码块可以检索某些运行时异常,而不是直接抛出异常,就可以使用catch块并将其抛出自定义异常。
catch (ArrayIndexOutOfBoundsException e) {
throw new YourCustomException("your message",e);
}
通过这种方式,您可以删除方法上的throws签名,Sonar会很高兴