"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 > ## As cadeias opcionais são a chave para eliminar NullPointerExceptions em chamadas \"Get\" encadeadas?

## As cadeias opcionais são a chave para eliminar NullPointerExceptions em chamadas \"Get\" encadeadas?

Publicado em 15/11/2024
Navegar:131

## Are Optional Chains the Key to Eliminating NullPointerExceptions in Chained \

Navegando com segurança em cadeias de chamadas "Get" propensas a nulos

Em bases de código complexas, o encadeamento de múltiplas chamadas "get" pode se tornar um terreno fértil para NullPointerExceptions. Para se proteger contra possíveis valores nulos, os desenvolvedores geralmente recorrem a verificações nulas detalhadas para cada objeto intermediário.

Mas existe uma maneira mais elegante e eficiente de lidar com tais cenários?

Cadeias opcionais

Com a classe Opcional do Java 8, temos uma solução elegante conhecida como cadeias opcionais. O empacotamento opcional nos permite lidar normalmente com nulos, retornando um valor Opcional em vez de um T bruto.

As cadeias opcionais permitem que você execute perfeitamente uma série de chamadas get, mapeando cada uma para um valor opcional. As verificações de nulos são tratadas internamente, garantindo que as operações subsequentes sejam executadas apenas se as anteriores retornarem valores não nulos.

Por exemplo, considere a seguinte cadeia de chamadas "get":

house. getFloor(0).getWall(WEST).getDoor().getDoorknob();

Para evitar NullPointerExceptions, você pode usar o seguinte nulo verificações:

if (house != null && house.getFloor(0) != null && house.getFloor(0).getWall(WEST) != null && house.getFloor(0).getWall(WEST).getDoor() != null) ...

No entanto, usando cadeias opcionais, você pode simplificar isso para:

Optional.ofNullable(house)
    .map(h -> h.getFloor(0))
    .map(floor -> floor.getWall(WEST))
    .map(wall -> wall.getDoor())
    .map(door -> door.getDoorknob());

Exemplo de uso

Vamos ilustrar o poder das cadeias opcionais com um exemplo:

System.out.println("----- Not Initialized! -----");

Optional.ofNullable(new Outer())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: "   foo)); //no print

System.out.println("----- Let's Initialize! -----");

Optional.ofNullable(new OuterInit())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: "   foo)); //will print!

Neste exemplo, quando os objetos são inicializados, a cadeia opcional lida normalmente com nulos, resultando em uma impressão bem-sucedida. Sem cadeias opcionais, uma NullPointerException teria ocorrido.

As cadeias opcionais não apenas simplificam o tratamento de nulos, mas também melhoram a legibilidade e a manutenção do código. Ao aproveitar o Opcional, você pode navegar com segurança em cadeias de chamadas "get", reduzindo a carga de verificações nulas explícitas e melhorando a robustez geral da sua base de código.

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