Java8函数式编程的方法引用

2017-06-20  本文已影响23人  Azur_wxj

本文参考: 《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);
上一篇下一篇

猜你喜欢

热点阅读