您的位置:首页 > 其它

关于Supplier的一些理解

xiaolu_333cmw 2020-04-02 18:38 92 查看 https://blog.csdn.net/xiaolu_3

在探寻orElseGet的时候查看底层实现的时候发现:

public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}

这个Supplier的是什么类型(从字面意思是提供者),接着查看supplier源码发下其如下结构:

/**
* Represents a supplier of results.
*
* <p>There is no requirement that a new or distinct result be returned each time the supplier is invoked.
*
* <p>This is a <a href="package-summary.html">functional interface</a> whose functional method is {@link #get()}.
*
* @param <T> the type of results supplied by this supplier
*
* @since 1.8
*/
@FunctionalInterface
public interface Supplier<T> {

/**
* Gets a result.
* @return a result
*/
T get();
}

官方给的解释还是满详细的,**第一:**这个函数函数不要求每次调用都返回不同的结构;**第二:**是一个fuctional interface。
不要求每次都相同的返回意味着新的调用会产生新的对象,这个配合上函数式接口会好理解很多,下面上代码:

//方法一:匿名内部类的方式
Supplier<IMessage> messageSupplier=new Supplier<IMessage>() {
@Override
public IMessage get() {
return new MessageImpl();
}
};
//方法二:函数式接口的方式(lambda表达式)
Supplier<IMessage> messageSupplier2=()->new MessageImpl();

两种方式等价。关于其他几个函数接口:JDK8函数式接口Function、Consumer、Predicate、Supplier,请移步大佬博客

  • 点赞
  • 收藏
  • 分享
  • 文章举报
xiaolu_333 发布了30 篇原创文章 · 获赞 0 · 访问量 486 私信 关注
标签: