ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在Java8中模拟Lazy

2019-05-22 19:52:04  阅读:621  来源: 互联网

标签: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 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

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

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有