Eu tenho pergunta com Java 8 Opcionais.
O código abaixo dá erro de compilação:
Integer number = Optional.ofNullable(new Integer(10));
Mas quando fazemos o seguinte ele não , eu não entendo como isso está funcionando:
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
Se olharmos para a documentação de Optional.ofNullable()
, ele retorna um objeto do tipo static <T> Optional<T> ofNullable(T value)
que significa que ele é do tipo internamente casting, mas a documentação diz que tipo de retorno é Optional
.
Tenho que o .orElse
tipo de retorno do método é T
que iria funcionar bem , se ele vai para orElse
a condição, ou seja, no caso do passado em objeto é null
, mas se não é nulo como é que typecast-lo?
Dê uma olhada na declaração do método,
public static <T> Optional<T> ofNullable(T value)
Então, isso leva T e retorna Optional<T>
Assim, no seu caso, leva Integer
e retorna umOptional<Integer>
Então, quando você fizer isso,
Optional.ofNullable(new Integer(10)).orElse(10);
A orElse
chamada será desembrulhar o opcional e retorna o valor nela se não está vazio. Caso contrário, ele simplesmente retorna o valor dado.
Atualizar
De acordo com os seguintes comentários que você pode simplificá-lo ainda mais, deixando o trabalho para a Autoboxing.
Optional.ofNullable(10).orElse(10);