一、方法引用前提
方法的引用是为了简化Lambda表达式,可以使用方法引用的前提条件是:
函数式接口中抽象方法的参数和返回值形式和方法体中的方法的参数和返回值一致,那么就可以使用方法引用
二、方法引用的三种情况
1、对象::实例方法名(非静态方法)
2、类::静态方法名
3、类::实例方法名
三、方法引用的三种情况推导
1、对象::实例方法名(非静态方法)
(1)常见的使用Java内置的消费型函数式接口
(2)使用方法引用
①Consumer接口抽象方法:void accept(T t);
②上面方法体中的方法:void println(String x);
上面的格式满足使用方法引用的条件:参数和返回值类型相似
2、类::静态方法名
当我们实现函数式接口,重写它的方法,方法体中调用某类的静态方法,该静态方法和函数式接口中的抽象方法参数和返回值 一样,就可以使用方法引用来进行简化
举例说明:
(1) Integer中有一个compare方法,比较两个数字的大小关系,参数是两个int类型的参数
(2)Comparator接口中有一个抽象方法和上面的compare方法参数和返回值一样,就可以通过方法引用来简化
(3)可以简化成
Comparator<Integer> com = Integer::compare;(通过类型推断,能推断出参数是否一样)
com.compare(10,20); //返回-1
3、类::实例方法名
该情况以断定型接口为例,传入参数,返回值为布尔类型,传入两个参数,比较是否相等
使用这个方法引用的前提,x作为方法的调用者,y作为方法的实际参数
简化成
BigPredicate<String,String> bp = String::equals;
bp.test("def","def"); //返回true(test是断定型接口中的抽象方法)
至此,关于方法引用技术点的介绍完毕,后续还会持续更新更多面试经典题目,希望大家能够持续关注!