方法引用和构造器引用与数组引用

我们在最一开始接触Lambda表达式时就说过,Lambda表达式就像一段可以传递的代码,将代码像数据一样传递,今天我们的“猪脚”就是方法引用和构造器引用与数组引用,他们兄弟三个可以做到真正将Lambda表达式像数据一样进行传递。

我们先来看一下方法引用:若Lambda体中的内容有方法已经实现了,我们可以使用"方法引用"

(可以理解为方法引用是Lambda表达式的另外一种表现形式)

对象::实例方法名

类::静态方法名

类::实例方法名

对象::实例方法名

我们看下面一段代码,Consumer是一个消费型接口,没有返回值,我们直接写(x)->System.out.println(x)将x打印到控制台。这时Lambda体已经实现了这个接口,就可以使用方法引用的方式调用Lambda表达式,这里Systrm.out.println(x)我们点println()里面是一个实例方法,这时就需要使用   对象::实例方法名  去引用Lamdba表达式。先使用System.out获取到PrintStream对象然后使用ps::println引用Lambda表达式

换一种形式可能更容易理解一些

但是还是需要注意的一点,使用方法引用的前提是,Lambda表达式实现的接口中抽象方法的参数列表和返回值要和Lambda体调用方法的参数列表和返回值保持一致。

Lambda表达式实现的函数式接口中的抽象方法的参数列表和返回值

Lambda体调用方法的参数列表和返回值

最终版代码

类::静态方法名

这里我们使用Comparator接口进行两个Integer的大小。在lamdba体中Integer类中的compare()是静态方法,在进行方法引用时直接使用类名.方法名调用

comparator 是javase中的接口,位于java.util包下,Integer是包装类

当然参数列表和返回值要保持一致

类::实例方法名

调用实例方法都是用对象名去调用,只有静态方法可以使用类名直接调用,但!当Lambda表达式中,算了有点绕,直接上图

BiPredicate是Predicate断言型函数式接口的子接口

其次,我们再来看一下  构造器引用

ClassName::new

这里我们使用供给型接口,在Lambda表达式中new一个Employee对象,使用构造器引用的方式可以调用到Employee的无参构造器。

当然一定要注意,不是每次都会调用无参构造器,调用哪个构造器取决于函数式接口中抽象方法的参数列表。

最后来看一下  数组引用:

Type[ ]::new; 

不多废话了,都大差不差,直接上图吧,30分钟的视频做了2个多小时笔记,晕

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值