Supplier JAVA_Java基础学习之函数式编程Supplier接口(JDK8)

前言

今天带大家领略一下Supplier接口大道至简的魅力。

1.源码

@FunctionalInterface

public interface Supplier {

/*** Gets a result.** @return a result*/

T get();

}

源码就这么一行,粗略的看一下好像就是给什么"T"就返回什么"T",而这次我特地把官方的注释放了出来,注释也很简单,翻译过来就是"拿一个返回一个",跟字面上的意思是一样的。

经过之前的几个接口的学习,我们不难发现其实这些函数式接口的唯一抽象方法的命名都是具有含义的,例如(1)Consumer.accept()

(2)Predicate.test()

(3)Function.apply()

而这个get方法并没有接收任何值,是直接返回了一个泛型对象,那么是不是可以用来创建对象呢?

package mytest;

import java.util.function.Supplier;

public class StringBuilderTest {

public static void main(String[] args) {

Supplier integerSupplier1 = () -> {

return new String("test1");

};

Supplier integerSupplier2 = () -> "test2";

Supplier integerSupplier3 = String::new;

System.out.println(integerSupplier3.get());

}

}

答案是肯定的,在上面的代码中1和2的supplier是创建了一个带有值的字符串对象,而如果要返回一个空对象的话,则可以使用3的这种形式。

package mytest;

import java.util.function.Supplier;

public class StringBuilderTest {

public static void main(String[] args) {

Supplier integerSupplier = () -> new Student("test");

Student a = integerSupplier.get();

Student b = integerSupplier.get();

System.out.println(a.hashCode());

System.out.println(b.hashCode());

}

static class Student{

private String name;

public Student(String name) {

this.name = name;

}

}

}

这里我们新建了一个对象,然后通过new这种方式来实现supplier接口,果不其然返回的两个对象的hashcode是不一样的,证明了确实是两个不同的对象。

package mytest;

import java.util.function.Supplier;

public class StringBuilderTest {

public static void main(String[] args) {

Student student = new Student("test");

Supplier integerSupplier = () -> student;

Student a = integerSupplier.get();

Student b = integerSupplier.get();

System.out.println(a.hashCode());

System.out.println(b.hashCode());

}

static class Student{

private String name;

public Student(String name) {

this.name = name;

}

}

}

那自然如果我们返回的是同一个对象,无论你怎么Get,Get几次,都是同一个对象。

顺水推舟,我们马上就可以想到我们老生长谈的单例模式,Java的单例模式 - NYC's Blog​niyanchun.comdaaa5a6ef06a747aed9143a8a1aa8c94.png

在这篇文章里面有一种单例方法使用了supplier接口来做单例模式,我这里就不再赘述。

到这里四个基础的函数式编程接口就全部介绍完毕了,接下来会综合的给大家介绍一些这几个接口的子类,敬请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值