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」に null の可能性があるとフラグを立てるソナー、Findbugs、または PMD ルールはありますか? どうやらCodeProはこれにフラグを立てており、可能であれば同様のものを提供する必要があります。

4

1 に答える 1

0

問題は、FindBugs がアノテーションのないアイテムをあたかもアノテーションが付けられているかのように扱い、@Nullableそれらに対する nullness チェックを無視することです。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 に答える