Tengo pregunta con Java 8 Opcionales.
El siguiente código da error de compilación:
Integer number = Optional.ofNullable(new Integer(10));
Pero cuando hacemos lo siguiente que hace no , no entiendo cómo esto está funcionando:
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
Si nos fijamos en la documentación de Optional.ofNullable()
, devuelve un objeto del tipo static <T> Optional<T> ofNullable(T value)
que quiere decir que está internamente la conversión de tipos, pero la documentación dice que vuelva tipo es Optional
.
Consigo que el .orElse
tipo de retorno método es T
que funcionaría bien si se va a orElse
condición, es decir, en caso de que el objeto sea aprobada en null
, pero si no es nulo, ¿cómo es que encasillado?
Echar un vistazo a la declaración del método,
public static <T> Optional<T> ofNullable(T value)
Así que esto se lleva a T y vuelve Optional<T>
Así que en su caso se toma Integer
y devuelve unaOptional<Integer>
Así que cuando usted hace esto,
Optional.ofNullable(new Integer(10)).orElse(10);
La orElse
llamada se desenvuelva el opcional y devuelve el valor en él si no está vacío. De lo contrario, simplemente devuelve el valor dado.
Actualizar
De acuerdo con los siguientes comentarios se puede simplificar aún más, dejando el trabajo a la Autoboxing.
Optional.ofNullable(10).orElse(10);