Если запустить следующий код,распаковка нулевого коробочный объекта бросает неожиданный NullPointerException
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, вам нужно сделать следующее, чтобы включить это:
- Перейдите к Окно>предпочтения>Java>Компилятор>Ошибки/Предупреждения
- Expand Потенциальные проблемы программирования
- Переключить Упаковка и распаковка преобразования либо «Предупреждение» или «Ошибка»
- Нажмите «OK»
Я не понимаю. Вы спрашиваете, почему происходит NPE, или это просто разглагольствование? Каким будет конкретный ответный вопрос? – madth3