方法引用的含义:
就是把已经有的方法的拿过来用,当做函数式接口中抽象方法的方法体
匿名内部类——>lambda表达式——>方法引用
lambda表达式:简化匿名内部类的缩写
方法引用:简化lambda表达式的缩写(方法和匿名内部类重写的抽象方法形参和返回值保持一致)
方法引用必须满足以下几点:
1:需要有函数式接口
2:被引用的方法已经存在
3:被引用方法的形参和返回值需要和抽象方法保持一致
4:被引用方法的功能要满足当前的需求
方法引用的的分类:
1:引用静态方法
2:引用成员方法(引用本类或父类的成员方法)
3:引用构造方法
4:类名引用成员方法
5:引用数组的构造方法
(1)引用静态方法
格式:类名::静态方法
(2)引用成员方法
格式:其他类:其他类对象::方法名
本类:this::方法名
父类:super::方法名
1:其他类:其他类对象::方法名
2: 本类:this::方法名
3: 父类:super::方法名
(3)引用构造方法:
格式:类名::new(无需写返回值,自动返回,返回值是对象地址)
参数s代表的是流中的每一个数据
最后把这个对象返回并添加到新的stream流中
(4)类名引用成员方法
格式:类名::成员方法(静态和非静态都统用)
并不是所有的类里面方法都可以引用,要满足一下几点
抽象方法解释:
第一个参数:表示引用方法的调用者,表示可以引用哪些类中的方法
第二个参数到最后一个参数:跟被引用的形参保持一致,如果没有则引用的这个方法则是无参
条件:
1:需要有函数式接口
2:被引用的方法已经存在
3:被引用方法的形参需要和抽象方法的第二个形参到最后一个形参保持一致,返回值保持一致
4:被引用方法的功能要满足当前的需求
这个代码中的抽象方法的第一个形参是String类型的,并且形参只有这一个,说明我们要引用的方法只能去String类中,不能去的别的类,并且在String这个类调用的方法的形参还是一个无参类型的
String里面的方法:
方法被调用:
局限性:
抽象方法的第一个形参决定引用哪种类里面方法
抽象方法的第二个形参到最后一个形参决定类里面方法的参数
抽象方法的返回值和类里面方法的返回值还要保持一致
(5):引用数组的构造方法
格式:数据类型[]::new
告诉大家一个小诀窍:
如果不知道引用哪个方法,可以先用匿名内部类写,在看看有哪个方法和匿名内部类里面的抽象方法的格式相同