假设我有这样一段代码:
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/