package org.netbeans.gradle.project.util;
import java.util.concurrent.atomic.AtomicReference;
import org.jtrim.utils.ExceptionHelper;
public final class LazyValue<T> implements NbSupplier<T> {
private final NbSupplier<? extends T> valueFactory;
private final AtomicReference<T> valueRef;
public LazyValue(NbSupplier<? extends T> valueFactory) {
ExceptionHelper.checkNotNullArgument(valueFactory, "valueFactory");
this.valueFactory = valueFactory;
this.valueRef = new AtomicReference<>(null);
}
@Override
public T get() {
T result = valueRef.get();
if (result == null) {
result = valueFactory.get();
if (!valueRef.compareAndSet(null, result)) {
result = valueRef.get();
}
}
return result;
}
}