package org.shedlang.compiler.util; import java.util.Optional; import java.util.function.Supplier; public class Lazy { public static Lazy of(Supplier supplier) { return new Lazy<>(supplier); } private final Supplier supplier; private Optional value; private Lazy(Supplier supplier) { this.supplier = supplier; this.value = Optional.empty(); } public T get() { if (this.value.isEmpty()) { this.value = Optional.of(this.supplier.get()); } return this.value.get(); } }