Junior — Middle
Comment peut-on initier le travail avec une instance paresseuse d'un objet?
sobes.tech IA
Réponse de l'IA
Ленивая инициализация означает создание объекта только в момент первого обращения к нему. В Java это можно сделать несколькими способами:
- Использовать паттерн Lazy Holder:
public class MyClass {
private static class LazyHolder {
static final ExpensiveObject INSTANCE = new ExpensiveObject();
}
public static ExpensiveObject getInstance() {
return LazyHolder.INSTANCE;
}
}
-
Использовать
SupplierилиOptionalс отложенной инициализацией. -
В Java 8+ можно использовать
java.util.concurrent.atomic.AtomicReferenceс проверкой и созданием объекта при первом вызове.
Пример с Supplier:
Supplier<ExpensiveObject> lazy = () -> new ExpensiveObject();
ExpensiveObject obj = lazy.get(); // объект создаётся здесь
Таким образом, работа с ленивым экземпляром начинается с вызова метода или функции, которая создаёт объект при первом обращении.