Encadeando Getters e Manipulando NullPointerExceptions
Ao realizar uma cadeia de chamadas de getter para recuperar dados de objetos aninhados, é necessário realizar verificações de nulos para evitar NullPointerExceptions. Isso pode rapidamente se tornar detalhado e desajeitado ao lidar com vários níveis de objetos.
Aninhamento de instruções If
Uma abordagem comum é aninhar instruções if, verificando cada objeto no cadeia para nulo antes de prosseguir. No entanto, este método pode se tornar pesado e difícil de manter.
Quebrar a Lei de Demeter (LoD)
Esta abordagem viola a Lei de Demeter (LoD) , que afirma que os métodos só devem chamar outros métodos em objetos aos quais fazem referência direta. Ao acessar objetos além de seu contexto imediato, esse método viola o encapsulamento das classes envolvidas.
Usando Opcional (Java 8)
Felizmente, Java 8 introduziu a classe Opcional , que fornece uma maneira mais elegante e segura de lidar com nulos em cadeias de getters. Opcional representa um valor possivelmente nulo e fornece métodos para mapear e filtrar o valor que ele contém.
Chain Getters com Opcional.ofNullable
Para encadear getters usando Opcional, basta chamar Opcional.ofNullable() no primeiro objeto da cadeia. Isso cria um objeto Opcional que representa o valor ou nulo. Você pode então encadear operações map() para aplicar chamadas getter ao valor, e Opcional tratará as verificações nulas automaticamente. .map(casa -> casa.getFloor(0)) .map(floorZero -> floorZero.getWall(OESTE)) .map(wallWest -> wallWest.getDoor()) .map(door -> door.getDoorknob());
Optional doorknob = Optional.ofNullable(house)
.map(house -> house.getFloor(0))
.map(floorZero -> floorZero.getWall(WEST))
.map(wallWest -> wallWest.getDoor())
.map(door -> door.getDoorknob());
Essa abordagem não apenas simplifica o código, mas também garante a segurança do tipo. A classe Opcional lançará uma exceção se você tentar acessar o valor que ela representa sem primeiro verificar se é nulo. Além disso, ele mantém o encapsulamento das classes envolvidas, pois você só acessa métodos diretamente nos objetos aos quais faz referência.
Conclusão
Embora ocasionalmente possa ser necessário violar o LoD, geralmente é recomendado evitar o aninhamento excessivo de instruções if ao encadear getters. Em vez disso, considere usar a classe Opcional para lidar com nulos de uma maneira mais elegante e com segurança de tipo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3