美文网首页
Java8-Lambda 方法的引用

Java8-Lambda 方法的引用

作者: 任重而道元 | 来源:发表于2017-08-06 17:23 被阅读26次

实例方法和类方法

引用实例方法

自动把调用方法的时候的参数,全部传给引用的方法

<函数式接口> <变量名> = <实例>::<实例方法名>;
// 自动把[实参]全部传递给引用的实例方法
<变量名>.<接口方法名>([实参]);

引用类方法

全部参数传递给引用的方法

<函数式接口> <变量名> = <类>::<类方法名>;
// 自动把[实参]全部传递给引用的类方法
<变量名>.<接口方法名>([实参]);

引用实例方法和类方法的实例Demo

package market.daoge.recode.java8;

import java.util.Arrays;

public interface MethodRef {
    void test(String s);
}

interface MethodRef1 {
    void test(int[] arr);
}

class TestMethodRef {
    public static void main(String[] args) {
        MethodRef r = (s) -> System.out.println(s);
        r.test("字符串的");

        // 使用方法的引用:实例方法的应用
        // System.out是一个实例
        MethodRef r1 = System.out::println;
        r1.test("方法引用");

        // 能够根据函数式接口的方法参数,推断应用的方法的参数的数据类型
        // 不引用方法进行排序
        MethodRef1 r3 = (o) -> Arrays.sort(o);
        //引用类方法
        MethodRef1 r2 = Arrays::sort;
        int[] a = new int[]{4,3,5,34,23};
        // 以后用方法排序
        r2.test(a);
        // 引用方法输出
        r1.test(Arrays.toString(a));
    }
}

类的实例方法

引用类的实例方法

定义,调用接口方法的时候,需要多一个参数,并且参数的类型和引用实例方法的类型必须一致,把第一个参数作为引用的实例,后面的每一个参数全部传递给引用的方法。

interface <函数式接口> {
<返回值> <方法名>(<类型><名称>[,其他的参数...]);
}
<函数式接口> <变量名> = <类>::<实例方法名>;
<变量名>.<方法名>(<类名的实例>[,其他参数]);

引用类的实例方法的实例Demo


interface MethodRef2 {
    void test(PrintStream out, String str);
}

class TestMethodRef {
    public static void main(String[] args) {

        // 引用类的实例方法
        MethodRef2 r4 = PrintStream::println;
        // 第二个之后的参数,作为引用到的方法的参数
        r4.test(System.out,"第二个参数");

    }
}

构造器引用

构造器引用

把方法的所有参数全部传递给引用的构造器,根据参数的类型推断调用的构造器。

<类名>::new

构造器引用实例Demo

interface MethodRef4 {
    String test(char[] cs);
}

class TestMethodRef {
    public static void main(String[] args) {

        // 引用构造器,根据函数式接口的方法名来判断应用哪一个构造器
        MethodRef4 r4 = String::new;
        String ok = r4.test(new char[]{'道','哥'});
        System.out.println(ok);

        // 不用构造器引用的写法
        MethodRef4 r5 = (c) -> {
            return new String(c);
        };
        r5.test(new char[]{'道','哥'});

    }
}

相关文章

  • Java8-Lambda 方法的引用

    实例方法和类方法 引用实例方法 自动把调用方法的时候的参数,全部传给引用的方法 <函数式接口> <变量名> = <...

  • Java8——方法引用和构造器引用

    方法引用和构造器引用 方法引用 若Lambda体中的内容已经有方法实现过了,我们可以使用方法引用(方法引用是Lam...

  • 2020-07-04【方法引用】

    体验方法引用 方法引用符 引用方式

  • 3.Java8新特性 - 方法引用与构造器

    一.方法的引用 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的...

  • 双冒号方法引用

    类别使用形式静态方法引用类名 :: 静态方法名实例方法引用对象名(引用名) :: 实例方法名类方法引用类名 :: ...

  • Java中的双冒号::是什么玩意?有这个语法?

    简洁 方法引用 Optional 可选值 一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用...

  • Lambda表达式(二)

    方法的引用 直接访问类或者实例的已经存在的方法或者构造方法,方法的引用提供了一种引用提供了一种引用而不执行方法的方...

  • 方法的引用

    上一篇文章,Lambda表达式与函数式接口掌握了没有呢?没有建议先看一下再来阅读本篇文章。这里给出跳转链接:Lam...

  • jdk8 方法引用

    方法引用 方法引用可看作一个“函数指针” function pointer 方法引用分为4类 1,类名::静态方法...

  • java学习:java8新特性之一,方法引用

    简单介绍:方法引用通过方法的名字来指向一个方法。 方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 方法引用使用...

网友评论

      本文标题:Java8-Lambda 方法的引用

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