Java - в чем разница между инициализацией одноэлементных и статических блочных классов?
Недавно я выучил синглтон-паттерн. И должен был понять один. Например:
public class Singleton {
private static Singleton instance;
private InnerObject innerObject; //all functionality is here
private Singleton() {
innerObject = new InnerObject();
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
public InnerObjectResult getResult() {
return innerObject.getResult(); //delegate method call
}
}
Но раньше я понял это так:
public class Singleton {
private static InnerObject innerObject;
static {
innerObject = new InnerObject();
}
public static InnerObjectResult getResult() {
return innerObject.getResult();
}
}
Таким образом, результат тот же: innerObject инициализируется один раз, но код чище, и мне не нужно беспокоиться о многопоточности. Я знаю, что шаблон не зависит от конкретных языков, и, вероятно, вы не можете сделать что-то подобное в другом месте, но меня интересует именно эта ситуация. Большое спасибо!