2

假设我有一个这样的代码块:

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 标记了这一点,如果可能的话,我需要提供类似的东西。

4

1 回答 1

0

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

@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);
    }
    ...
}

更新:有关实施此建议的完整详细信息,请参阅我之前对类似问题的回答。

于 2013-04-18T05:32:18.803 回答