package xapi.util.impl; import xapi.inject.impl.SingletonProvider; import javax.inject.Provider; public class LazyProvider <T> extends SingletonProvider<T> { private final Provider<T> provider; public LazyProvider(Provider<T> provider) { this.provider = provider; } public LazyProvider(T maybeNull, Provider<T> provider) { this.provider = maybeNull == null ? provider : new ImmutableProvider<>(maybeNull); } @Override protected final T initialValue() { return provider.get(); } public static <T> LazyProvider<T> of(Provider<T> provider) { return new LazyProvider<>(provider); } public static <T> LazyProvider<T> of(T maybeNull, Provider<T> provider) { return new LazyProvider<>(maybeNull, provider); } }