声纳和@CheckForNull的使用

时间:2019-05-29 10:27:07

标签: java sonarqube

当允许这些方法返回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中一样重写大量代码以分配局部变量(无论如何我都可能知道最佳实践,但是我要处理很多遗留代码。

0 个答案:

没有答案