次のコードを実行すると、
public class Foo{
public static void main(String[] args){
int id = new Bar().getId(); // throws unexpected NullPointerException
}
private static class Bar{
private final Integer id;
public Bar(){
this(null);
}
public Bar(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
}
}
次のスタックトレースを取得します。
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:3)
コンパイラの警告などがないのはなぜですか? 私見、それはボックス化解除のかなり厄介な微妙さです。または、私が単純なだけかもしれません。
@Javierが提供する回答に加えて、Eclipse を使用している場合は、これを有効にするために次の操作を行う必要があります。
- Window> Preferences> Java> Compiler>に移動しますErrors/Warnings
- 潜在的なプログラミングの問題を展開する
- ボックス化とボックス化解除の変換を「警告」または「エラー」に切り替えます
- 「OK」をタップ