Inclusive em alguns casos isso gera NullPointerExcpetion, minha pergunta é: Qual é a melhor maneira de evitar uma Exception nesse caso ? Fazer um nullCheck em cada objeto funciona, mas o codigo fica péssimo, ficaria tipo isso:
Depende do objetivo da funcionalidade. Esse código está tão confuso que não dá pra entender nada. Se essa informação vem do banco, faria uma query já trazendo o resultado final. Mas é melhor você explicar o objetivo.
S
staroski1 like
Vejo isso diariamente e isso só reforça minha opinião de que os alemães são muito bons no ramo automobilístico mas péssimos quando o assunto é software.
Códigos desse tipo só deveriam ser escritos quando se tem a certeza de que em nenhum momento das chamadas encadeadas ocorrerá NullPointerException.
E essa certeza só existe quando se implementa muito bem uma uma interface fluente ou o padrão Builder, o que não é o caso nesse tipo de código legado…
Exatamente, é uma ótima alternativa.
Tem que ver se o sistema legado em que nosso colega trabalha permite o uso do Java 8.
Eu por exemplo trabalho com um software alemão que só pode ser implementado com Java 6.
A
AbelBueno
Grande sugestao.
Aliás, usando o map ao invés de flatMap você nem precisa converter o valor para optional novamente, simplificando ainda mais o código!
A
andre_a_s1 like
Percebeu quanto código repetido?
Ao invés disso utilize variáveis locais, é mais elegante e a execução é mais rápida.
Sim! Foi isso que quis dizer com “Mesmo se atribuir os gets para algum objeto, ainda ficaria bem feio.”
Vejo isso diariamente e isso só reforça minha opinião de que os alemães são muito bons no ramo automobilístico mas péssimos quando o assunto é software.
Na verdade esses são Holandeses… mas é tudo meio que a mesma coisa!
Acabei escrevendo um método parecido com esse seu “isFormat”, tá limpo, mas fica bem grande comparado com a gambiarra que só tinha uma linha… pelo menos agora não dá NP!
A
andre_a_s
Quem me dera! Tudo aqui é Java 7
S
staroski
Imaginei, europeus costumam ser resistentes à mudanças.
D
diego12
Neste caso eu criaria um método na classe ou um “util” para acessar diretamente o format, algo mais ou menos: