java8 lambda表达式-方法引用(静态方法、实例方法、构造方法)(::运算符)

说明

方法引用,可以简化 lambda表达式

应用场景

如果 逻辑比较简单,就直接写 lambda表达式

如果 逻辑比较复杂,需要 多行代码 才能实现,需要封装成方法,就使用 方法引用

分类

方法引用 分为以下3种:

  • 静态方法 的方法引用
  • 实例方法 的方法引用
  • 构造方法 的方法引用

案例

接口

查询电话详单接口

public interface QueryCallLog {

    void query(String num,String password);
}

lambda 写法

QueryCallLog qcl = ( num , password ) -> {
    //伪代码:先执行登录
    System.out.println(num + " 登录成功!");
    //伪代码:查询电话详单
    System.out.println("2022-01-01 打电话给lucy");
    System.out.println("2022-01-02 打电话给lili");
};

qcl.query("1388888","123456");

静态方法 的方法引用

lambda表达式 中的代码封装到 静态方法 中,如下:

public class QueryUtil {

    public static void query(String num,String password){
        //伪代码:先执行登录
        System.out.println(num + " 登录成功!");
        //伪代码:查询电话详单
        System.out.println("2022-01-01 打电话给lucy");
        System.out.println("2022-01-02 打电话给lili");
    }
}

使用 :: 调用:

QueryCallLog qcl = QueryUtil::query;

qcl.query("1388888","123456");

实例方法 的方法引用

lambda表达式 中的代码封装到 实例方法 中,如下:

public class QueryUtil {

    public void query(String num,String password){
        //伪代码:先执行登录
        System.out.println(num + " 登录成功!");
        //伪代码:查询电话详单
        System.out.println("2022-01-01 打电话给lucy");
        System.out.println("2022-01-02 打电话给lili");
    }
}

使用 :: 调用:

QueryCallLog qcl = new QueryUtil()::query;

qcl.query("1388888","123456");

构造方法 的方法引用

lambda表达式 中的代码封装到 构造方法 中,如下:

public class QueryUtil {

    public QueryUtil(String num,String password){
        //伪代码:先执行登录
        System.out.println(num + " 登录成功!");
        //伪代码:查询电话详单
        System.out.println("2022-01-01 打电话给lucy");
        System.out.println("2022-01-02 打电话给lili");
    }
}

使用 :: 调用:

QueryCallLog qcl = QueryUtil::new;

qcl.query("1388888","123456");

感谢:
https://www.zhihu.com/question/37872003/answer/1009015660
https://blog.csdn.net/LittleDragonLaw/article/details/118314669
https://blog.csdn.net/yelang0/article/details/100054075
https://baijiahao.baidu.com/s?id=1668251437991590587&wfr=spider&for=pc


原文出处:https://www.malaoshi.top/show_1IX362GC0Bf6.html