@Override
    public T get() {
        if (!this.initialized) {
            synchronized (this) {
                if (!this.initialized) {
                    // compute the value using the delegate
                    T t = this.supplier.get();

                    this.value = t;
                    this.initialized = true;

                    // release the delegate supplier to the gc
                    this.supplier = null;
                    return t;
                }
            }
        }
        return this.value;
    }
A lazy supplier extension.

<p>The delegate supplier is only called on the first execution of {@link #get()}.
The result is then cached and returned for all subsequent calls.</p>

@param <T> the supplied type
helper/src/main/java/me/lucko/helper/cache/Lazy.java