JDK8函数式接口之Supplier

273 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

写在前面

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());
    }

}

执行代码结果如下:

image.png

从上述示例代码中,我们可以看出来,利用这个方法可以创建出一个自定义逻辑的对象,比如说你想要填充某些值,就可以利用Supplier来创建。

当然了,需要是在一些典型场景下才能应用这样的方式,一般都是和其他函数接口搭配使用。

其他函数式接口都提供了一些格外的默认接口,但是Supplier函数接口并没有其他接口了。

多次创建的对象是否是一个对象?

答案:不是,每次生成出来的对象都是不同的。

大家可以创建出两个对象来进行比对hashCode值,你就会发现两个对象hashCode值不同。

总结

今天学习了Supplier函数接口,使用Supplier来创建了一些新对象,大家是否学会了?