Jeśli uruchomić poniższy kod,unboxing null pudełkowej obiekt rzuca nieoczekiwana 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;
}
}
}
dostaniesz następujące StackTrace,
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:3)
Jak to nie ma ostrzeżenie kompilatora lub cokolwiek? IMHO to dość nieprzyjemna subtelność z rozpakowywaniem, a może po prostu jestem naiwna.
Dodawanie do odpowiedzi udzielonej przez @Javier, jeśli używasz Eclipse, należy wykonać następujące czynności, aby umożliwić w ten sposób:
- przejdź do Okno>Preferencje>Java>Kompilator>Błędy/ostrzeżenia
- Rozwiń Potencjalne problemy programistyczne
- Przegubowe Boks i unboxing konwersje albo "Ostrzeżenie" lub "Error"
- puknij "OK"
Nie rozumiem. Pytasz, dlaczego dzieje się NPE, czy to tylko rant? Jakie byłoby konkretne pytanie podlegające odpowiedzi? – madth3