Безопасная навигация по цепочкам вызовов Get, подверженных нулевым значениям
В сложных кодовых базах объединение нескольких вызовов Get в цепочку может стать питательной средой для исключений NullPointerExceptions. Чтобы защититься от потенциальных нулевых значений, разработчики часто прибегают к подробной проверке нулевых значений для каждого промежуточного объекта.
Но есть ли более элегантный и эффективный способ справиться с такими сценариями?
Дополнительные цепочки
С классом необязательных в Java 8 у нас есть элегантное решение, известное как необязательные цепочки. Необязательная упаковка позволяет нам корректно обрабатывать значения NULL, возвращая значение Необязательно
Необязательные цепочки позволяют беспрепятственно выполнять серию вызовов 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
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3