Se si esegue il codice riportato di seguito,unboxing di un oggetto boxed nulla getta NullPointerException inaspettato
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;
}
}
}
si otterrà la seguente stacktrace,
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:3)
Come mai non c'è nessun avviso del compilatore o altro? IMHO è una sottigliezza piuttosto brutta con unboxing, o forse sono solo ingenuo.
Aggiungendo alla risposta fornita da @Javier, se si sta utilizzando Eclipse, è necessario eseguire le seguenti operazioni per attivare questa:
- Naviga a Finestra> Preferenze >Java>Compilatore>Errori/avvertenze
- Espandi problemi potenziali di programmazione
- Toggle Boxing e unboxing conversioni a uno "warning" o "Error"
- Toccare "OK"
Non capisco. Stai chiedendo perché succede il NPE o questo è solo un rant? Quale sarebbe la specifica domanda rispondente? – madth3