package edu.uw.zookeeper.common;
import com.google.common.base.Optional;
public class CachingBuilder<T, U extends Builder<T>> extends Factories.Holder<U> implements Builder<T> {
public static <T, U extends Builder<T>> CachingBuilder<T,U> fromBuilder(U builder) {
return new CachingBuilder<T,U>(builder);
}
private Optional<T> result;
public CachingBuilder(U instance) {
super(instance);
this.result = Optional.absent();
}
/**
* Not thread-safe
*/
@Override
public T build() {
if (! result.isPresent()) {
result = Optional.of(get().build());
}
return result.get();
}
}