Returning null como int permitido con operador ternario pero no si la declaración
Veamos el código Java simple en el siguiente fragmento:
public class Main {
private int temp() {
return true ? null : 0;
// No compiler error - the compiler allows a return value of null
// in a method signature that returns an int.
}
private int same() {
if (true) {
return null;
// The same is not possible with if,
// and causes a compile-time error - incompatible types.
} else {
return 0;
}
}
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.temp());
System.out.println(m.same());
}
}
n este código Java más simple, eltemp()
l método @ no emite ningún error del compilador aunque el tipo de retorno de la función esint
, y estamos tratando de devolver el valornull
(a través de la declaraciónreturn true ? null : 0;
). Cuando se compila, esto obviamente causa la excepción de tiempo de ejecuciónNullPointerException
.
in embargo, parece que lo mismo está mal si representamos al operador ternario con unaif
eclaración @ (como en lasame()
método), quehac ¡emite un error en tiempo de compilación! ¿Por qué