前言
通过前面两章「Lambda必知必会的基础知识」、「Lambda内置函数式接口」的讲解相信大家对Lambada已经有了比较深刻的认识,通过Lambda确实可以简化我们的代码,但在使用的过程中我们可能会遇到这样一个问题,对于存在的方法Lambda应该怎么使用呢?对于这个问题本章我们继续探讨Java8的另一个功能方法引用。
方法引用
方法引用,指重复使用已有的方法定义,在这里表现为通过已有的方法创建Lambda表达式,让代码拥有更好的可读性。如果对这里有疑问,莫要慌,请继续向下看。
如何构建?
- 语法:
[类名|对象名]::方法
; - 构建形式:构造方法引用、静态方法引用、实例方法引用、对象方法引用。如下表所示:
引用形式 | 语法 | 等效Lambda | 备注 |
---|---|---|---|
构造方法引用 | 类名::new | (args) -> new 类名(args) | |
静态方法引用 | 类名::方法名 | (args) -> 类名.方法名(args) | |
实例方法引用 | 类名::方法名 | (instance,args) -> instance.方法名(args) | instance为lambda传入参数的实例(第一个参数为实例,之后参数为调用方法的方法参数) |
对象方法引用 | 对象::方法名 | (args) -> obj.方法名(args) | obj为lambda外部对象(非传入) |
实例方法引用、对象方法引用看起来可能会有点晕,可以先记下接下来,我们通过示例来加深对这四种形式的理解!
示例
构造方法引用
构造器参数列表与函数式接口参数保持一致即可替换
- 无参构造
// Lambda形式
Supplier<Apple> apple = () -> new Apple();
System.out.println(apple.get()); //com.uucoding.java.entity.Apple@305fd85d
// 构造方法引用形式
Supplier<Apple> appleNew = Apple::new;
System.out.println