<< 2006/09/03 | Home | 2006/09/05 >>
PR: 転職    転職    合宿免許    漫画    シルバー    ブライダルエステ    墓地・霊園    葬式   

@NonNull

enum Foo {
    A, B
}

public class Test {
    public static void main(String[] args) throws Exception {
        EnumMap map = new EnumMap(Foo.class);
        map.get(null);
    }
}
$ findbugs.bat -low -textui Test.class
H C NP: Test.main(String[]) でnullをメソッドに渡していますが、この引数は java.util.EnumMap.get(Object) で@NonNull宣言されています。  Test.java:[line 10]行目
Warnings generated: 1

あれ? 何で標準ライブラリのEnumMap.get()にFindBugsの@NonNullアノテーションが付いてるの? と思ったら、FindBugs内部で、こんなことをしていた。

addMethodParameterAnnotation("java.util.EnumMap", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);

しかしEnumMap.get()はAPI仕様書に、引数がnullの場合の挙動が書かれていないので、微妙だ。現在の実装はnullだったらnullが返るようだが、そもそもEnumにnullのメンバなんてあり得ないんだから、null引数ならNPEって仕様にしておけば良かった気がする。Map.get()にもNPE投げてokって書いてあるんだし。

猫ページ

猫ページ更新完了。

このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8