使用findFirst时,质量检查因声纳Nullpointer而失败

时间:2019-03-30 19:55:44

标签: java java-stream

SonarQube质量失败,方法中可能存在NullPointer

调用该方法时,我正在检查!= null,但没有通过

private Asset findAsset(List<Asset> assets, Long assetId) {
    return assets.parallelStream()
                 .filter(ast -> ast.getAssetId().equals(assetId))
                 .findFirst()
                 .orElse(null);
}

我正在尝试以下代码:

if (findAsset(assetCompositionList, pair.getKey()) != null) {
    assetMap.put(pair.getKey(),
            findAsset(assets, pair.getKey()).getAssetCode());
}

调用时,我已经在!=null方法中检查findAsset()

1 个答案:

答案 0 :(得分:2)

第二次调用findAsset函数时出错。

assetMap.put(pair.getKey(), findAsset(assets, pair.getKey()).getAssetCode());

首先在变量中收集结果,然后检查是否为空。

Asset asset = findAsset(assetCompositionList, pair.getKey());
if (asset != null) { 
    assetMap.put(pair.getKey(), asset.getAssetCode());
}

由于您两次调用方法,因此在第一次调用时存在空检查,但是在第二次调用时,没有空检查。 Sonar不够智能,无法检查在多个函数调用中是否传递了相同的参数。