本文参考: 《30分钟入门Java8之方法引用》
方法引用,一般有四种形式:
引用构造方法
ClassName::new
等价于Lamda表达式
()->new ClassName()
函数接口
interface F{
ClassName contructMethod();
}
引用静态方法
ClassName::staticMethod
等价于Lamda表达式:
(a1,a2,...,an)->ClassName.staticMethod(a1,a2,...,an);
函数接口
interface F{
ReturnType method(a1,a2,....,an);
}
引用对象的实例方法
obj::method
等价于Lamda表达式:
(a1,a2,....,an)->obj.method(a1,a2,...,an)
函数接口
interface F{
ReturnType method(a1,a2,....,an);
}
引用类型对象的实例方法(※)
ClassType::method
等价于Lamda表达式:
(obj,a1,a2,....,an)->obj.method(a1,a2,...,an)
其中,obj是ClassType类型的对象。
函数接口
interface F{
ReturnType method(a1,a2,....,an);
}
比如,有类Int,它保存一个int值,并且有一个减两个减数的方法subtract
class Int{
int value;
public Int(int value) {
this.value = value;
}
int subtract(Int other1,Int other2){
return value-other1.value-other2.value;
}
}
还有一个Func接口,接受三个Int参数,返回一个int值
interface Func{
int action(Int a,Int b,Int c);
}
在Test中有方法show
public static void show(Int a,Int b,Int c,Func func){
System.out.print(func.action(a,b,c));
}
那么,可以按如下方式使用show:
Int intA=new Int(1),intB=new Int(2),intC=new Int(3);
show(intA,intB,intC,/*Lamda表达式*/(Int a,Int b,Int c)->a.subtract(b,c));
show(intA,intB,intC,/*引用类型对象的实例方法*/Int::subtract);
网友评论