package nucleus.example.util; public class Delayed<T> { public interface Factory<T> { T create(); } private final Factory<T> factory; private T value; private boolean initialized; public Delayed(Factory<T> factory) { this.factory = factory; } public synchronized T get() { if (!initialized) { value = factory.create(); initialized = true; } return value; } }