假设我有一段这样的代码:
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标记了这一点,如果可能的话,我需要提供类似的东西。
答案 0 :(得分:0)
问题在于,FindBugs将未注释的项视为使用@Nullable
进行注释,这会导致它忽略对它们的空值检查。您可以创建一个使用自定义java.util
注释注释的空@ReturnValuesAreCheckForNullByDefault
包(修改@ReturnValuesAreNonnullByDefault
),但它将适用于每个中每个方法/ em>该包中的类。
@ReturnValuesAreCheckForNullByDefault
package java.util;
import edu.umd.cs.findbugs.annotations.ReturnValuesAreCheckForNullByDefault;
另一种选择是创建使用Map
注释的@CheckForNull
外观。
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类似问题。