说明
方法引用,可以简化 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