- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java8中的方法引用
对一个类某个方法进行引用。方式大致为:
类型::方法名(构造方法为类型::new)对象::方法名
例子:String的静态方法valueOf对应的方法引用为String::valueOf,Object的构造方法对应的方法引用为Object::new 调用对象o的实例方法hashCode对应的方法引用为o::hashCode
方法引用有什么用?
在讲方法引用有什么用之前,先引见一下lambda表达式 Lambda表达式 在Java8消灭之前,当我们需要创建某个接口的一个实例时,通常的做法是:
创建接口的一个实现类,然后通过该类来创建实例
interface?A?{????void?say(String?s);}class?AImpl?implemnets?A?{????@Override????public?void?say(String?s)?{????????System.out.println(s);????}}A?a?=?new?AImpl();
通过匿名内部类的方式
interface?A?{????void?say(String?s);}A?a?=?new?A()?{????@Override????public?void?say(String?s)?{???????System.out.println(s);????}}
假照实现类只会被使用一次,通过匿名内部类的方式更简约。
有相当一部分接口实际上只要一个笼统方法(default方法不是抽像方法),对于这样的接口,我们称之为函数式接口。比如Comparator、Runnable等接口。
jdk中的函数式接口的声明处一般都有@FunctionalInterface注解,加上这个注解的接口,假如不满足函数式接口的规范(只要一个笼统方法),编译器就会报错。
对于函数式接口,Java8引入lambda表达式来进一步简化匿名内部类的写法,因而非函数式接口是不能用lambda表达式的方式来创建接口的实例。lambda表达式在很多言语中都有,比如在
JavaScript中是=表示的函数写法,在Java中则是-。
Lambda表达式的方式:
(参数1,参数2,...)?-?{????//?笼统方法实现的代码块????...}
假如参数只要1个,则可以省略掉括号 假如代码块中只要一行代码,则可以省略掉花括号和代码块结尾的分号 假如代码块中只要一条语句,且该语句为return语句,则可以将return省略
一个比较简短的lambda表达式长这样:
a?-?a+1()?-?System.out.println(hello world!)
进一步简化lambda表达式 方法引用的引出是为了简化代码,简化什么代码呢?答案就是简化lambda表达式,而且是对于只要一行代码的lambda表达式。下面来看几个案例:
将一个整型数字转换成对应的字符串
//?接口interface?A?{???String?m(Integer?i);}//?创建A的一个实例,lambda表达式写法A?a?=?i?-?String.valueOf(i);a.m(1);?//?输出?1
将一个整型字符串转换成整型数字
//?接口interface?A?{???Integer?m(String?s);}//?创建A的一个实例,lambda表达式写法A?a?=?s?-?Integer.valueOf(s);a.m(1);?//?输出?1
对于上面的两个lambda表达式,都是这样的一种情况:lambda的形参作为某个静态方法的实参传入,在实际编程中有太多类似的这样的情况,因而对于这种代码,引入了方法引用进行简化,以上两个lambda表达式用方法引用的写法如下:
A?a?=?String::valueOfA?a?=?Integer::valueOf
方法引用的几种方式 下面引见我总结的几种方法引用的转换方式:
类名::静态方法名 对象::实例方法名 类名::实例方法名 类型::new(构造方法的引用)
类名::静态方法名 lambda表达式中调用某个类的静态方法,且lambda的形参作为静态方法的参数传入,并且lambda的方法前往类型要和实例方法的前往类型对应上。如:
str?-?Integer.parseInt(str)?
对应的方法引用:
Integer::parseInt
接受擦除法,去掉左右两边全都的参数表
对象::实例方法名
lambda表达式中调用某个对象的某个方法,并且lambda的形参作为该方法的实参,并且lambda的方法前往类型要和实例方法的前往类型对应。如:
class?A?{??void
您可能关注的文档
- 张图带你深入理解 Docker 架构!.docx
- 条 SQL 语句性能优化策略,建议收藏!.docx
- 种让线程顺序执行的方式,你知道吗?.docx
- 张图梳理 Intellij IDEA 常用设置.docx
- . 万亿条数据查询,如何做到毫秒级响应?.docx
- ClickHouse全面解析,看这一篇文章就够了.docx
- Elasticsearch 在业界的大量应用案例.docx
- HDFS .x 升级到 .x 在车好多的实践.docx
- Hbase、Kudu 和 ClickHouse 全面对比(万字、张图).docx
- Jar 包依赖冲突很烦人,总结一波排查思路和解决方法.docx
- Java生鲜电商平台SpringCloud微服务架构中分布式事务解决方案.docx
- JetBrains出品,一款好用到爆的数据库工具,惊艳到了!!!.docx
- Kafka 降本实用指南.docx
- Kafka 灵魂伴侣之运维管控–集群运维.docx
- kafka生产者消息投递分区?消费者选择分区?.docx
- Kafka的灵魂伴侣LogiKafkaManger()之运维管控集群列表.docx
- Kafka的灵魂伴侣LogiKafkaManger(一),滴滴开源项目.docx
- MySql删除重复记录并且只保留一条.docx
- RabbitMQ如何动态创建队列和监听.docx
- Redis 的 大数据类型,写得非常好!.docx
最近下载
- 高边坡专项施工方案(专家论证版).pdf VIP
- 《工程化学基础》教案-第3章-2011.ppt VIP
- 抗日英雄王二小.pptx VIP
- 第5课 用发展的观点看问题-【中职专用】2024年中职思想政治《哲学与人生》金牌课件(高教版2023·基础模块).pptx VIP
- 老友记台词剧本第一季第1集中英双语左右对照.pdf VIP
- 形势与政策社会实践报告模板.docx VIP
- 全套SPC表格(很全面) CPK.xls VIP
- T_CI 540-2024 红枣蒸馏酒生产技术规程.pdf
- 施工组织设计方案(高速公路通信迁改).docx VIP
- Part3-4 Unit6 Craftsmanship课件高一英语(高教版基础模块2).pptx
文档评论(0)