假设我有如下代码块:

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
}

是否有一个Sonar,Findbugs或PMD规则将“ mappy”标记为可能为空? 显然CodePro对此进行了标记,如果可能的话,我需要提供类似的内容。

===============>>#1 票数:0

问题在于,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);
    }
    ...
}

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

  ask by David M. Karr translate from so

未解决问题?本站智能推荐: