В Java 8 был внедрен новый тип Optional
, который может вызвать затруднения у некоторых разработчиков. Суть Optional
заключается в том, что он может содержать либо объект, либо пустоту.
Пример классической реализации геттера:
public class Foo { private Bar bar; public Bar getBar() { return bar; } }
В этом случае, если bar
не инициализирован, то getBar()
вернет null
. Это может привести к NullPointerException
, если не предусмотрена обработка этого случая.
Использование Optional
может показаться хорошим решением этой проблемы. Геттер с Optional
будет выглядеть следующим образом:
public class Foo { private Bar bar; public Optional<Bar> getBar() { return Optional.ofNullable(bar); } }
В этом случае, если bar
не инициализирован, то getBar()
вернет Optional.empty()
, что поможет избежать NullPointerException
.
Однако, использование Optional
в геттерах не всегда является наилучшей практикой. Во-первых, это делает код более громоздким и сложным для чтения. Во-вторых, Optional
предназначен для использования в качестве возвращаемого типа для методов, которые могут не возвращать результат, а не в качестве защиты от null
.
К тому же, использование Optional
не избавляет от проверки на отсутствие значения, так как перед использованием объекта необходимо проверить, что Optional
не пуст.
Вывод следующий: использование Optional
в геттерах — это вопрос стиля и предпочтений команды. Если null
является допустимым значением для поля и это явное поведение, то использование Optional
может быть оправдано. В противном случае, лучше придерживаться классического подхода и обрабатывать null
там, где это необходимо.
Добавить комментарий