当允许这些方法返回null时,我已经开始使用@CheckForNull对其进行注释。但是,即使已检查返回值,Sonar仍在抱怨可能存在NullPointers。
@CheckForNull
public Object canReturnNull(){
return null;
}
public Object canAlsoReturnNull(){
return null;
}
public void testMethod(){
if(canReturnNull()!=null){
Class cls = canReturnNull().getClass(); //Sonar complains about possible NP
}
if(canAlsoReturnNull()!=null){
Class cls = canAlsoReturnNull().getClass(); //Sonar does not complain about possible NP
}
}
public void testMethod2(){
Object o = canReturnNull();
if(o !=null){
Class cls = o.getClass(); //Sonar does not complain anymore
}
if(canAlsoReturnNull()!=null){
Class cls = canAlsoReturnNull().getClass(); //Sonar does not complain about possible NP
}
}
从理论上讲,我知道有可能第一次调用canReturnNull()可以返回非null对象,而第二个调用则不能,但是有一种方法可以告诉Sonar处理该方法的所有后续调用检查的特定方法?
否则,我将不得不像在testMethod2中一样重写大量代码以分配局部变量(无论如何我都可能知道最佳实践,但是我要处理很多遗留代码。