开发者社区> 问答> 正文

Lazy 的最终代码如何实现的?

Lazy 的最终代码如何实现的?

展开
收起
游客hmzk6xi5mlygs 2022-05-12 14:51:23 307 0
1 条回答
写回答
取消 提交回答
  • public class Lazy< T> implements Supplier< T> {

    private final Supplier< ? extends T> supplier;

    private T value;

    private Lazy(Supplier< ? extends T> supplier) { this.supplier = supplier; }

    public static < T> Lazy< T> of(Supplier< ? extends T> supplier) { return new Lazy< >(supplier); }

    public T get() { if (value == null) { T newValue = supplier.get();

    if (newValue == null) { throw new IllegalStateException("Lazy value can not be null!"); }

    value = newValue; }

    return value; }

    public < S> Lazy< S> map(Function< ? super T, ? extends S> function) { return Lazy.of(() -> function.apply(get())); }

    public < S> Lazy< S> flatMap(Function< ? super T, Lazy< ? extends S>> function) { return Lazy.of(() -> function.apply(get()).get()); } }

    2022-05-12 17:42:14
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
fibjs 模块重构从回调到协程--陈垒 立即下载
fibjs 模块重构从回调到协程 立即下载
继承与功能组合 立即下载

相关实验场景

更多