![a60e9767e6ce716f7a791ef84b3b5498.png](https://i-blog.csdnimg.cn/blog_migrate/932337c78c04f0f58e85e9c5b7dd957e.jpeg)
前言
今天带大家领略一下Supplier接口大道至简的魅力。
1.源码
@FunctionalInterface
源码就这么一行,粗略的看一下好像就是给什么"T"就返回什么"T",而这次我特地把官方的注释放了出来,注释也很简单,翻译过来就是"拿一个返回一个",跟字面上的意思是一样的。
经过之前的几个接口的学习,我们不难发现其实这些函数式接口的唯一抽象方法的命名都是具有含义的,例如
(1)Consumer.accept()
(2)Predicate.test()
(3)Function.apply()
而这个get方法并没有接收任何值,是直接返回了一个泛型对象,那么是不是可以用来创建对象呢?
package
答案是肯定的,在上面的代码中1和2的supplier是创建了一个带有值的字符串对象,而如果要返回一个空对象的话,则可以使用3的这种形式。
package
这里我们新建了一个对象,然后通过new这种方式来实现supplier接口,果不其然返回的两个对象的hashcode是不一样的,证明了确实是两个不同的对象。
package
那自然如果我们返回的是同一个对象,无论你怎么Get,Get几次,都是同一个对象。
顺水推舟,我们马上就可以想到我们老生长谈的单例模式,
Java的单例模式 - NYC's Blogniyanchun.com![9f2a2b1d145fcf04b0f421724b9259be.png](https://i-blog.csdnimg.cn/blog_migrate/e23e1aea997c261d4d518f54564ecb57.jpeg)
在这篇文章里面有一种单例方法使用了supplier接口来做单例模式,我这里就不再赘述。
到这里四个基础的函数式编程接口就全部介绍完毕了,接下来会综合的给大家介绍一些这几个接口的子类,敬请期待!