网站首页 > 基础教程 正文
java8 lambda表达式系列历史文章
什么是方法引用?
Lambda还有一个非常重要的功能,就是方法引用。方法引用可以理解为lambda表达式的简便写法。方法引用是用来直接访问类或者实例的已经存在的方法或构造方法(函数),它比lambda表达式更加的简洁,更高的可读性,更好的复用性。
方法引用的语法
类名(或实例)::方法名
方法引用的分类
对象方法引用的定义
1.抽象方法的第一个参数类型刚好是实例方法的对象类型;
2.抽象方法剩余的参数恰好可以当做实例方法的参数。
如果函数式接口的实现能满足以上的2个条件,就可以称之为对象方法引用。
对象方法引用的示例
废话少说,直接上干货,代码示例中都有重要注释
无输入参数,无返回值
1.第一个参数g类型为Girl,没有其它参数,说明要调用无参方法
2.同时g作为body体调用run方法的对象,run方法刚好没有参数
public class LambdaObjectMethodTest {
@Test
public void test(){
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl,没有其它参数,说明要调用无参方法
* 2.同时也是body体调用方法的对象,run方法刚好没有参数
*/
Consumer<Girl> c1 = (Girl g) -> g.run();
c1.accept(new Girl());
}
}
class Girl{
public void run(){
System.out.println("girl in running...");
}
}
有参数,无返回值
1.第一个参数g类型为Girl
2,第二个参数String 类型,作为调用eat方法的参数 2.同时g作为body体调用方法eat的对象
public class LambdaObjectMethodTest2 {
@Test
public void test(){
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl2,第二个参数String 类型,作为调用eat方法的参数
* 2.同时g作为body体调用方法eat的对象
*/
BiConsumer<Girl2,String> c1 = (Girl2 g, String f) -> g.eat(f);
c1.accept(new Girl2(),"苹果");
}
}
class Girl2{
public void eat(String food){
System.out.println("girl eat "+food);
}
}
有参数,有返回值
1.第一个参数g类型为Girl3,第二个参数为String类型,符合g对象的getAge的参数类型
2.同时g也是body体调用方法getAge的对象,刚好参数类型及个数匹配
public class LambdaObjectMethodTest3 {
@Test
public void test() {
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl3,第二个参数为String类型,符合g对象的getAge的参数类型
* 2.同时g也是body体调用方法getAge的对象,刚好参数类型及个数匹配
*/
BiFunction<Girl3,String, Integer> bf1 = (Girl3 g, String name) -> g.getAge(name);
int age = bf1.apply(new Girl3(),"爱莎公主");
System.out.println(age);
}
}
class Girl3 {
public Integer getAge(String name) {
System.out.println(name + "is " + 20 + " old.");
return 20;
}
}
大家可以看出上述示例都是类Girl、Girl2、Girl3都有默认构造方法,若是带参构造方法又如何实现对象方法引用呢?作为作业留给大家练习。
下一章节将为大家分享构造方法引用,请大家持续关注。如有问题或不妥之处,欢迎拍砖。
猜你喜欢
- 2024-11-30 Java开发「函数式编程」——Lambda表达式
- 2024-11-30 Java 中的 Supplier:让数据生成更灵活
- 2024-11-30 Java 中的 Predicate:让判断逻辑更清晰灵活
- 2024-11-30 Java8精华-函数式编程(一)读完这篇,你将彻底理解
- 2024-11-30 你知道实现一个JAVA接口有几种方式吗?配合lambda更加意想不到
- 2024-11-30 java8精华-函数式编程-Predicate(四)
- 2024-11-30 巧妙应用 Java 的 Functional Interface:让代码更简洁、更灵活
- 2024-11-30 函数式接口编程真没那么难,简单几行让你的代码更优雅
- 2024-11-30 初窥函数式接口,不会取标题,没有噱头,全是干货
- 2024-11-30 JDK8新特性:函数式接口@FunctionalInterface
- 最近发表
-
- 在使用Bootstrap吗?快来看看如何使用 Bootswatch 主题吧
- 50个HTML5免费的Bootstrap模板 :下
- 定制你的bootstrap之--修改less文件1
- BootstrapBlazor :使用 .NET 生成交互式客户端 Web UI 的框架
- React与使用Bootstrap5模态框的注意事项
- 如何引用bootstrap没有的字体图标
- 10个超酷炫Bootstrap HTML & CSS UI工具包
- Bootstrap自举电路工作原理讲解(自举电路的原理)
- 为何 BootstrapVue 能成为 Vue 前端框架顶流?
- 新增 创意布局企业网络服务CSS模板 bootstrap 模板
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)