使用起来最简洁的Java语法
2020-06-03 16:03:35来源:博客园 阅读 ()
我今天开始学习方法报价,它是lambda表达式的进一步简化版本,语法应该更简洁。
1.方法参考
有一个需求:
将字符串中的所有信息转换为大写字母,然后将其打印出来。
使用功能性编程思想编写代码。
1.Lambda表达式编写
①功能界面可打印
这是一个带有抽象方法printMsg()的自定义打印接口,用于打印信息
②lambda表达式
method方法中有两个参数,lambda表达式表示接口的实现类对象。在lambda表达式中,已经编写了业务逻辑。
什么是业务逻辑?
我的理解是方法的内容:根据什么参数获得什么结果。
在上面的示例中:根据传递的字符串消息(即参数msg)
结果是将所有味精更改为大写字母(msg.toUpperCase)
这是业务逻辑。当然,我给出的示例非常简单,实际上它必须复杂得多。
2.方法参考
方法引用用于替换更简洁的lambda表达式。从某种意义上说,它们具有相似的功能。
①方法参考
具体格式为:newMyPrint()::printMsg
核心是双冒号“::”,如何理解这种格式?
可以理解,MyPrint对象正在调用printMsg方法。
为什么可以这种方式直接使用它?因为它的逻辑已经存在,即MyPrint类中的PrintMsg方法及其业务逻辑
②业务逻辑
将字符串msg更改为所有大写字母,这等效于重写MyPrint类的接口中的abstract方法。
3.方法参考和lambda表达式:
现在的问题来了:方法不是引用了lambda表达式的简化形式吗?您如何看待代码变得越来越麻烦?
让我们看一下①,方法引用比lambda表达式更简单吗?
如果使用方法引用,则无论使用多少次业务逻辑,我都只需编写一次,然后在其他时间直接调用它;
如果使用lambda表达式,则每次调用时都要编写业务逻辑。
因此,该方法引用的简洁之处在于不必重复编写相同的逻辑。
通过这种方式可以理解,方法引用比lambda表达式简单得多,尤其是在业务逻辑非常复杂的情况下
当然,方法参考的前提是:业务逻辑已经存在。
如果逻辑已经存在,我可以使用方法参考,
如果逻辑不存在,请乖乖地编写lambda表达式。
二,其他方法参考
上例中的方法引用是对象引用方法,除对象引用外,还有许多其他方法。
1.类名参考
如果它是静态方法,则可以使用类名直接调用该方法。
Java的底层已经编写了很多工具类,其大多数方法都是静态方法,直接使用方法引用更为方便。
Math是一个工具类,它具有一个静态方法abs()。
因此,方法引用直接用类名引用了abs方法,因为其中的逻辑已经在Java的底部编写了。
类名参考格式如下:
lambda表达式:number->Math.abs(number)
方法参考:Math::abs
当然,方法参考也有局限性,例如,我现在需要绝对值的10倍。
lambda表达式直接更改业务逻辑。
但是无法使用方法引用,因为Java底部没有这样的业务逻辑。即使我们需要使用方法引用,我们也必须首先编写逻辑。
2.通过此引用成员方法
编写这样的代码只是为了获得良好的观看效果,这不是标准的做法,因此它们是一起编写的。
此参考格式如下:
lambda表达式:name->this.introduce(name)
方法参考:this::introduce
在这方面,这是此类的代表。此类中已经有一个介绍方法。然后,我使用它来引用此类中的相应方法。
3.通过super引用成员的方法
如果MyClass具有父类,则具有fuIntroduce方法,如果要引用此方法,则可以使用super关键字。
用法与此相同,因此不再赘述。
超级参考格式如下:
lambda表达式:name->super.fuIntroduce(name)
方法参考:super::fuIntroduce
Super代表父类,并且父类中已经有fuIntroduce方法,然后我使用super来引用父类中的相应方法。
4.类构造函数参考
类结构具有以下格式:
lambda表达式:name->newPerson(name)
方法参考:Person::new
Person::new等效于创建对象(newPerson())
不要看这段代码的复杂性,实际上它等同于新对象。
当然,对类构造函数的理解并不充分。暂时,只需记住方法引用并使用它来创建对象。
5.数组构造函数参考
数组也是Object的子类,因此它们也具有构造函数,但是语法略有不同。
数组构造函数的格式如下:
lambda表达式:length->newint[length]
方法参考:int[]::new
与类构造函数相同的原因:
int[]::new等效于创建一个数组(newint[length])
原文链接:https://www.cnblogs.com/hite/p/13037668.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:MyBatis缓存特性详解
- 聊聊 OAuth 2.0 的 token expire_in 使用 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 学习笔记之方法引用 2020-06-06
- idea使用小技巧(一) 2020-06-05
- 用斗地主的实例学会使用java Collections工具类 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash