java - 是否有 Sonar、Findbugs 或 PMD 规则来检测 CodePro 检测到的这种可能的 NPE?

标签 java sonarqube findbugs pmd codepro

假设我有这样一段代码:

Map<String, Object> mappy = 
    (Map<String, Object>)pExtraParameters.get(ServiceClientConstants.EXTRA_PARAMETERS);

if (pSSResponseBean!=null) {
    mappy.put(AddressResearchContext.CSI_RESPONSE_BEAN, (AddressNotFoundResponseBean)pSSResponseBean); // this line may  throw null pointer
}

是否存在将“mappy”标记为可能为空的 Sonar、Findbugs 或 PMD 规则?显然 CodePro 标记了这一点,如果可能的话,我需要提供类似的东西。

最佳答案

问题在于 FindBugs 将未注释的项目视为使用 @Nullable 进行注释,这导致它忽略针对它们的空性检查。您可以创建一个带有自定义 @ReturnValuesAreCheckForNullByDefault 注释(修改 @ReturnValuesAreNonnullByDefault )的空 java.util 包,但它将应用于每个该包中每个类中的方法。

@ReturnValuesAreCheckForNullByDefault
package java.util;

import edu.umd.cs.findbugs.annotations.ReturnValuesAreCheckForNullByDefault;

另一种选择是创建使用 @CheckForNull 注释的 Map facade。

public class AnnotatedMap<K, E> implements Map<K, E>
{
    private final Map<K, E> wrapped;

    @CheckForNull
    public E get(K key) {
        return wrapped.get(key);
    }
    ...
}

更新:查看我的previous answer有关实现此建议的完整详细信息的类似问题。

关于java - 是否有 Sonar、Findbugs 或 PMD 规则来检测 CodePro 检测到的这种可能的 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071978/

相关文章:

concurrency - 我应该从 FindBugs 中得到什么并发警告?

java - 定义一个 swig 接口(interface)文件,用于从某个头文件生成每种类型的包装器

java - 如何使用 Google Apps 脚本执行 API + Java 创建 Google 表单?

sonarqube - SonarQube 中的质量门故障不会使 Teamcity 中的构建失败

java - Findbugs 与 Google CodePro AnalytiX(Eclipse 插件)

java - Findbugs 使用 Lombok 构建器创建问题

java - Netty:如何将查询字符串与 websocket 一起使用?

java - 模拟器崩溃 "Invalid int"

gradle - 我可以将lint-result.xml上传到Android Gradle项目中的SonarQube吗?

gradle - Gradle 中的 travis-ci、sonarqube 错误