标签:java lambda java-8 evaluation lazy-evaluation
我编写了以下代码来模拟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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。