美文网首页
Java8函数式编程的方法引用

Java8函数式编程的方法引用

作者: Azur_wxj | 来源:发表于2017-06-20 00:54 被阅读23次

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

    相关文章

      网友评论

          本文标题:Java8函数式编程的方法引用

          本文链接:https://www.haomeiwen.com/subject/yrznqxtx.html