编程语言
首页 > 编程语言> > 在Java8中模拟Lazy

在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 that Supplier<T>
conforms to Lazy<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