class LazilyInstantiate<T> implements Supplier<T> {

	private volatile T t;

	private final Supplier<T> supplier;

	private LazilyInstantiate(Supplier<T> supplier) {
		this.supplier = supplier;
	}

	public static <T> LazilyInstantiate<T> using(Supplier<T> supplier) {
		return new LazilyInstantiate<>(supplier);
	}

	public T get() {<FILL_FUNCTION_BODY>}

}

		T localT = t;
		if (localT == null) {
			synchronized (this) {
				localT = t;
				if (localT == null) {
					localT = supplier.get();
					t = localT;
				}
			}
		}
		return localT;
	
<no_super_class>