Sobes.tech
Junior — Middle
113

¿Qué enfoques se pueden utilizar para evitar excepciones al usar objetos perezosos?

Empresas donde se preguntó
СБЕР ТехСБЕР Тех

Respuesta de la IA

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 при доступе.