方法引用
双冒号
::
式引用运算符,其所在的表达式被称为方法引用当对象和方法已经存在时,可以使用方法引用优化Lambda表达式
分析:
下面程序中Lambda表达式的目的:打印参数传递的字符串
在printstring
中把参数s传递给了System.out
对象,调用out中的方法println
对字符串输出
因为System.out
对象和println
已经存在,所以可使用方法引用优化表达式
使用System.out
直接引用println
方法
1 |
|
实现引用成员方法
- 自定义一个类
MethodReObject
1 | public class MethodReObject { |
1. 通过对象引用成员方法
- 定义一个接口
DemoInterface
,包含一个抽象方法print
- 在主类中定义
printstring
方法,参数为接口DemoInterface
类型,方法中调用接口的方法
1 |
|
2. 通过类名引用静态方法
- 定义一个函数式接口
Calcable
,包含抽象方法可以计算两个数的和 - 在主类中定义方法
method1
,参数传递Calcable
接口,调用其中的给抽象方法
1 |
|
3. 通过super和this引用成员方法
如果存在继承关系,当Lambda中需要super调用时,也可以使用方法引用进行替代
this代表当前对象,如果需要引用的方法就是当前类中的成员方法,可以使用
this::成员方法
来进行方法引用定义函数式接口
Greetable
定义子类
SubReObject
继承MethodReObject
1 |
|
4. 类的构造器引用
- 构造器引用使用
类名称::new
的格式表示 - 定义函数式接口
ObjectBuilder
,创建一个MethodReObject
对象
1 |
|
5. 数组的构造器引用
1 |
|