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

Каким образом можно инициировать работу с ленивым экземпляром объекта?

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

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

sobes.tech AI

Ленивая инициализация означает создание объекта только в момент первого обращения к нему. В Java это можно сделать несколькими способами:

  1. Использовать паттерн Lazy Holder:
public class MyClass {
    private static class LazyHolder {
        static final ExpensiveObject INSTANCE = new ExpensiveObject();
    }

    public static ExpensiveObject getInstance() {
        return LazyHolder.INSTANCE;
    }
}
  1. Использовать Supplier или Optional с отложенной инициализацией.

  2. В Java 8+ можно использовать java.util.concurrent.atomic.AtomicReference с проверкой и созданием объекта при первом вызове.

Пример с Supplier:

Supplier<ExpensiveObject> lazy = () -> new ExpensiveObject();
ExpensiveObject obj = lazy.get(); // объект создаётся здесь

Таким образом, работа с ленивым экземпляром начинается с вызова метода или функции, которая создаёт объект при первом обращении.