在Java8中模拟Lazy
作者:互联网
我编写了以下代码来模拟Lazy< T>在Java中:
import java.util.function.Supplier;
public class Main {
@FunctionalInterface
interface Lazy<T> extends Supplier<T> {
Supplier<T> init();
public default T get() { return init().get(); }
}
static <U> Supplier<U> lazily(Lazy<U> lazy) { return lazy; }
static <T>Supplier<T> value(T value) { return ()->value; }
private static Lazy<Thing> thing = lazily(()->thing=value(new Thing()));
public static void main(String[] args) {
System.out.println("One");
Thing t = thing.get();
System.out.println("Three");
}
static class Thing{ Thing(){System.out.println("Two");}}
}
但我得到以下警告:
“value
(T)
in Main cannot be applied to (com.company.Main.Thing
)
reason: no instance(s) of type variable(s) T exist so thatSupplier<T>
conforms toLazy<Thing>
“
你能帮我找出问题所在吗?
提前致谢!
解决方法:
Lazy是供应商的子类,您正试图将其转换为其他类型.
更改
private static Lazy<Thing> thing = lazily(() -> thing = value(new Thing()));
至
private static Supplier<Thing> thing = lazily(() -> thing = value(new Thing()));
应该管用.
标签:java,lambda,java-8,evaluation,lazy-evaluation 来源: https://codeday.me/bug/20190522/1153560.html