写在前面
JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的Supplier函数接口。
JDK8函数式接口之Supplier
Supplier函数式接口,我们将在以下几个方面说一下。
首先来看一下源码中写了些什么?
@FunctionalInterface public interface Supplier<T> { /** * Gets a result. * * @return a result */ T get(); }
是不是感觉没什么东西,其实确实没什么,Supplier也只是单独提供了一个get接口方法。
从方法上面来看,没有相关的参数传入,只是返回了一个泛型为T的对象。
所以这个方法功能就是提供一个创建新对象的功能,可以在代码中创建出一个新对象,并且这个新对象中可以自行填充数据。
让我们来看一下示例代码吧:
@Data @AllArgsConstructor @NoArgsConstructor public class Test { private String name; private String pwd; public static void main(String[] args) { Supplier<Test> supplier = () -> new Test("张三", "123"); System.out.println(supplier.get()); } }
执行代码结果如下:
从上述示例代码中,我们可以看出来,利用这个方法可以创建出一个自定义逻辑的对象,比如说你想要填充某些值,就可以利用Supplier来创建。
当然了,需要是在一些典型场景下才能应用这样的方式,一般都是和其他函数接口搭配使用。
其他函数式接口都提供了一些格外的默认接口,但是Supplier函数接口并没有其他接口了。
多次创建的对象是否是一个对象?
答案:不是,每次生成出来的对象都是不同的。
大家可以创建出两个对象来进行比对hashCode值,你就会发现两个对象hashCode值不同。
总结
今天学习了Supplier函数接口,使用Supplier来创建了一些新对象,大家是否学会了?