java8 lambda表达式-方法引用(静态方法、实例方法、构造方法)(::运算符) 作者:马育民 • 2022-04-08 22:53 • 阅读:10077 # 说明 方法引用,可以简化 lambda表达式 ### 类比 相当于 JavaScript、python、scala语言,可以将一个函数,作为一个参数,传递给另一个函数 ### 前提条件 方法名、返回值 可自定义,但是方法的 **形参类型**、**数量**,必须与接口相同 # 应用场景 如果 **逻辑比较简单**,就直接写 lambda表达式 如果 **逻辑比较复杂**,需要 **多行代码** 才能实现,java8 可以将其 **封装成方法**,就是 **方法引用** # 分类 方法引用 分为以下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 原文出处:http://malaoshi.top/show_1IX362GC0Bf6.html