介绍
方法引用(Method Reference)是Java 8中的一个特性,允许通过引用现有方法来传递其功能,而不是使用Lambda表达式来定义一个函数式接口的实现。方法引用可以使代码更加简洁易读,同时也可以减少Lambda表达式的冗余代码。
原则
方法引用可以替代Lambda表达式的部分情况,通常需要满足以下两个条件:
- 方法引用的目标方法必须和Lambda表达式的方法签名保持一致。比如方法形参和关键字需要相同
- 方法引用所在的函数式接口必须和Lambda表达式的函数式接口类型一致。
语法
方法引用通常有以下四种语法格式:
常用的是前两个
静态方法引用
类名::静态方法名
特定对象方法引用
实例对象::实例方法名
特定类的任意对象方法引用
类名::实例方法名
注意
若Lambda表达式的参数列表的第一个参数,是实例方法的调用者,第二个参数(或无参)是实例方法的参数时,就可以使用这种方法
BiPredicate<String, String> b = String::equals;
b.test("abc", "abcd");
String是一个类而equals为该类的定义的实例方法。BiPredicate中的唯一抽象方法test方法参数列表与equals方法的参数列表相同,都是接收两个String类型参数。
构造方法引用
类名::new
其中,静态方法引用和实例方法引用的方法签名需要和函数式接口的方法签名一致;对象方法引用的方法签名除了要和函数式接口的方法签名一致,还需要一个参数作为方法的调用者;构造方法引用的方法签名需要和函数式接口的方法签名一致,并且构造方法没有方法名。
特点
- 方法引用可以简化Lambda表达式的代码,使代码更加易读和简洁。
- 方法引用可以使代码更加符合面向对象的编程思想。
- 方法引用可以提高代码的可读性和可维护性,减少代码的错误和调试难度。
注意事项(*
重点)
- 方法引用通常用于函数式接口,需要满足方法签名的要求。比如方法形参和关键字需要相同
- 方法引用不是一种新的语言特性,而是一种语法糖,依赖于Lambda表达式和函数式接口的支持。
- 方法引用可以使代码更加简洁易读,但也需要合理使用,避免过度使用而导致代码可读性下降。