如果您运行以下代码,
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
- 展开潜在的编程问题
- 将装箱和拆箱转换切换为“警告”或“错误”
- 点击“确定”