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

Как дополнительный класс Java 8 может упростить цепочку геттеров и избежать исключений NullPointerException?

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

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

Цепочка геттеров и обработка исключений NullPointerExceptions

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

Вложение операторов if

Один из распространенных подходов — вложение операторов if, проверяющих каждый объект в цепочка для нуля, прежде чем продолжить. Однако этот метод может стать громоздким и сложным в обслуживании.

Нарушение закона Деметры (LoD)

Этот подход нарушает закон Деметры (LoD) , в котором говорится, что методы должны вызывать другие методы только для объектов, на которые они ссылаются напрямую. Получая доступ к объектам за пределами их непосредственного контекста, этот метод нарушает инкапсуляцию задействованных классов.

Использование необязательного (Java 8)

К счастью, в Java 8 появился дополнительный класс , который обеспечивает более элегантный и типобезопасный способ обработки нулевых значений в цепочках геттеров. Необязательный представляет собой, возможно, нулевое значение и предоставляет методы для сопоставления и фильтрации содержащегося в нем значения. Необязательный.ofNullable() для первого объекта в цепочке. При этом создается дополнительный объект, который представляет значение или ноль. Затем вы можете связать операции map() для применения вызовов метода получения к значению, а необязательный будет автоматически обрабатывать проверки на нулевое значение. .map(дом -> house.getFloor(0)) .map(floorZero -> FloorZero.getWall(WEST)) .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());

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3