«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## Являются ли необязательные цепочки ключом к устранению исключений NullPointerException в связанных вызовах «Get»?

## Являются ли необязательные цепочки ключом к устранению исключений NullPointerException в связанных вызовах «Get»?

Опубликовано 15 ноября 2024 г.
Просматривать:833

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

Безопасная навигация по цепочкам вызовов Get, подверженных нулевым значениям

В сложных кодовых базах объединение нескольких вызовов Get в цепочку может стать питательной средой для исключений NullPointerExceptions. Чтобы защититься от потенциальных нулевых значений, разработчики часто прибегают к подробной проверке нулевых значений для каждого промежуточного объекта.

Но есть ли более элегантный и эффективный способ справиться с такими сценариями?

Дополнительные цепочки

С классом необязательных в Java 8 у нас есть элегантное решение, известное как необязательные цепочки. Необязательная упаковка позволяет нам корректно обрабатывать значения NULL, возвращая значение Необязательно вместо необработанного значения T.

Необязательные цепочки позволяют беспрепятственно выполнять серию вызовов get, сопоставляя каждый из них с необязательным значением. Проверки на null обрабатываются внутри, гарантируя, что последующие операции выполняются только в том случае, если предыдущие возвращают ненулевые значения.

Например, рассмотрим следующую цепочку вызовов «get»:

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

Чтобы избежать исключений NullPointerException, вы можете использовать следующие проверки на null:

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

Однако, используя необязательные цепочки, вы можете упростить это до:

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

Пример использования

Давайте проиллюстрируем возможности необязательных цепочек на примере:

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!

В этом примере, когда объекты инициализируются, необязательная цепочка корректно обрабатывает значения NULL, что приводит к успешной печати. Без необязательных цепочек возникло бы исключение NullPointerException.

Необязательные цепочки не только упрощают обработку значений NULL, но также улучшают читаемость и удобство обслуживания кода. ИспользуяOptional, вы можете безопасно перемещаться по цепочкам вызовов get, уменьшая нагрузку на явные проверки на null и повышая общую надежность вашей кодовой базы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3