Sobes.tech
Назад к вопросам
Junior — Middle
65

Какие подходы можно использовать, чтобы избежать возникновения исключений при использовании ленивых объектов?

Компании, где спрашивали
СБЕР ТехСБЕР Тех

Ответ от нейросети

sobes.tech AI

Чтобы избежать исключений при работе с ленивыми объектами (lazy initialization) в Java, можно использовать следующие подходы:

  • Использовать класс Optional для безопасной работы с возможным отсутствующим значением.
  • Применять потокобезопасные ленивые инициализации, например, через synchronized блоки или java.util.concurrent.atomic.AtomicReference.
  • Использовать встроенный механизм ленивой инициализации через Lazy<T> (в Java 8+ можно использовать Supplier<T> с мемоизацией).
  • Проверять объект на null перед использованием.

Пример безопасной ленивой инициализации с использованием synchronized:

public class LazyExample {
    private volatile ExpensiveObject instance;

    public ExpensiveObject getInstance() {
        if (instance == null) {
            synchronized(this) {
                if (instance == null) {
                    instance = new ExpensiveObject();
                }
            }
        }
        return instance;
    }
}

Такой подход предотвращает создание объекта несколько раз и исключает NullPointerException при доступе.