Hace unos días, me encontré con un escenario fascinante en el que no pude encontrar ninguna documentación sobre cómo o por qué Java permite que suceda lo siguiente. (Este fragmento es solo una forma simplificada del error).
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
en el fragmento de arriba:
si bool = true, obtienes el valor '5';
pero si bool = false, se obtiene una excepción de puntero nulo al intentar evaluar la operación ternaria. NO la declaración impresa.
Para solucionar esto, simplemente cambio 'resultado' a
Long result = bool ? Long.valueOf(intVal) : longVal;
Al hacer esto, obtendré el comportamiento esperado que necesitaba:
si bool = true, obtienes el valor '5';
pero si bool = false, entonces obtienes 'nulo'
ahora la parte divertida es que si divide esto en una declaración if / else normal, entonces Java NO le permite compilar
longVal = intVal;
pero no capta eso a través del operador ternario. Entonces, ¿qué está haciendo Java para que sea un punto nulo en el fragmento original?
(Java 11)