首页 > 解决方案 > 声纳和@CheckForNull 的使用

问题描述

当允许这些方法返回 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() 的第一次调用可能会返回一个非空对象,而第二次则不会,但有办法告诉 Sonar 将在该特定方法中对该方法的所有后续调用视为检查?

否则我将不得不重写很多代码来分配一个局部变量,就像在 testMethod2 中一样(我知道可能是最佳实践,但我有很多遗留代码要处理。

标签: javasonarqube

解决方案


推荐阅读