"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como a classe opcional do Java 8 pode simplificar getters de encadeamento e evitar NullPointerExceptions?

Como a classe opcional do Java 8 pode simplificar getters de encadeamento e evitar NullPointerExceptions?

Publicado em 2024-11-08
Navegar:843

How Can Java 8\'s Optional Class Simplify Chaining Getters and Avoid NullPointerExceptions?

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.

Tutorial mais recente Mais>

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