Fala pexadas. No últimos dias, tenho encontrado muitos erros na utilização do Optional nos projetos que tenho trabalhado.
Sendo assim, resolvi criar um este artigo é tentar mostrar algumas formas corretas de utilizar o Optional.
#Introdução
O Java 8 trouxe consigo uma infinidade de novidades que fizeram com que essa versão fosse a queridinha de muita gente. Dentre elas está o famoso Optional.
O objetivo inicial do Optional era ser utilizado como retorno das funções onde o seu retorno pudesse, por ventura, não conter valores. Assim quem chamou uma função que devolvesse um Optional, poderia verificar se o retorno possui ou não valores antes de tentar utilizar. Caso o valor não exista, pode ser facilmente substituído por um valor padrão caso seja necessário.
Sendo assim, o principal objetivo dessa “biblioteca”, é reduzir os famosos NPE (Null Pointer Exception).
Vamos discutir agora um pouco sobre o uso dessa ferramenta.
Onde não utilizar Optional
Evite usar como atributos de classe POJO, DTO e Comando
O Java Optional não é recomendado para classes tipo POJO, DTO e Comandos pelo simples fato de que eles não são serializáveis. Sendo assim se você ainda precisa ter um atributo de classe optional, use um atributo com valor nulo e na seu método “get” faça ele retornar o Optional do seu campo.
Evite usar como parâmetros dos métodos
Vamos pensar pelo seguinte ponto de vista. Quando eu recebo um parâmetro, eu tenho 2 possíveis situações: não nulo ou nulo. Quando eu passo um Optional como parâmetro agora eu tenho 3 possíveis situações: nulo, não nulo com valor ou não nulo sem valor.
Vamos fazer alguns exemplos:
metodo("bola", Optional.of("chuteira"));
metodo("bola", Optional.empty());
metodo("bola", null);
Se você precisa ter um optional como o segundo paramêtro, talvez seja melhor fazer uma sobrecarga do método para aceitar com um ou dois parâmetros como abaixo:
metodo("bola");
metodo("bola", "chuteira");
Evite usar Optional em listas
Tenho percebido que algumas pessoas gostam de usar o Optional em listas como List<Optional<T>
ouMap<String, Optional<T>>
. Talvez isso pareça uma boa idéia, mas na prática pode causar mais confusão. Talvez seja melhor colocar o valor nulo e fazer uma verificação no momento de utilizar os dados da lista.
Conclusão
Tirando esses principais pontos, acredito que não exista outros pontos críticos para a utilização do Java Optional. Então utilizem essa biblioteca com saberia e refatorem seus códigos onde estiverem utilizando da forma inadequada.
Até a próxima pexadas.