在java中实现一个懒惰的供应商

时间:2012-12-01 20:54:15

标签: java guava lazy-evaluation

在Java中实现惰性供应商的正确范例或实用程序类(似乎找不到预先存在的类)是什么?

我希望能够处理计算一次/缓存后续行为,并允许我独立指定计算行为。我知道这可能有错误,但它有正确的语义:

abstract public class LazySupplier<T> implements Supplier<T> 
{
    private volatile T t;
    final private Object lock = new Object();

    final public T get() {
        if (t == null)
        {
            synchronized(lock)
            {
                if (t == null)
                    t = compute();
            }
        }
        return t;
    }
    abstract protected T compute();
}

2 个答案:

答案 0 :(得分:31)

这已在Suppliers.memoize方法中实现。

答案 1 :(得分:1)

Apache Commons Lang有LazyInitializer