Всем добра.
Тема довольна избита и ответ многим широко известен (
раз статья,
два статья), но поставлю вопрос следующим образом: почему рекомендуют использовать On Demand Holder реализацию, а не обычную через статический метод getInstance(), который возвращает значение статического поля?
Инстанс будет создан в момент инициализации класса, т.е. при первом обращении к статическому методу getInstance (так говорит
JLS). Почему же тогда этот вариант отбрасывается и не считается ленивым?
И, чтобы не быть голословным, пример:
public class Main {
static class Singleton {
private static final Singleton INSTANCE = new Singleton();
public static Singleton getInstance(){
return INSTANCE;
}
private Singleton(){
System.out.println("instance created");
}
}
public static void main(String[] args) {
System.out.println("1");
Singleton instance1 = null;
System.out.println("2");
Singleton instance2 = Singleton.getInstance();
System.out.println("3");
}
}
Вывод:
1
2
instance created
3