您所在位置: 网站首页 / 文档列表 / Java / 文档详情
详解Java中的Lambda表达式.docx 立即下载
2024-04-30
约6.8千字
约10页
0
15KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

详解Java中的Lambda表达式.docx

详解Java中的Lambda表达式.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

详解Java中的Lambda表达式详解Java中的Lambda表达式Java8开始出现,带来一个全新特性:使用Lambda表达式(JSR-335)进行函数式编程。今天我们要讨论的是Lambda的其中一部分:虚拟扩展方法,也叫做公共辩护(defender)方法。该特性可以让你在接口定义中提供方法的默认实现。例如你可以为已有的接口(如List和Map)声明一个方法定义,这样其他开发者就无需重新实现这些方法,有点像抽象类,但实际却是接口。当然,Java8理论上还是兼容已有的库。虚拟扩展方法为Java带来了多重继承的特性,尽管该团队声称与多重继承不同,虚拟扩展方法被限制用于行为继承。或许通过这个特性你可以看到了多重继承的影子。但你还是可以模拟实例状态的继承。我将在接下来的文章详细描述Java8中通过mixin混入实现状态的继承。什么是混入mixin?混入是一种组合的抽象类,主要用于多继承上下文中为一个类添加多个服务,多重继承将多个mixin组合成你的类。例如,如果你有一个类表示“马”,你可以实例化这个类来创建一个“马”的实例,然后通过继承像“车库”和“花园”来扩展它,使用Scala的写法就是:valmyHouse=newHousewithGaragewithGarden从mixin继承并不是一个特定的规范,这只是用来将各种功能添加到已有类的方法。在OOP中,有了mixin,你就有通过它来提升类的可读性。例如在Python的socketserver模块中就有使用mixin的方法,在这里,mixin帮助4个基于不同Socket的服务,包括支持多进程的UDP和TCP服务以及支持多线程的UDP和TCP服务。classForkingUDPServer(ForkingMixIn,UDPServer):passclassForkingTCPServer(ForkingMixIn,TCPServer):passclassThreadingUDPServer(ThreadingMixIn,UDPServer):passclassThreadingTCPServer(ThreadingMixIn,TCPServer):pass什么是虚拟扩展方法?Java8将引入虚拟扩展方法的概念,也叫publicdefendermethod.让我们姑且把这个概念简化为VEM。VEM旨在为Java接口提供默认的方法定义,你可以用它在已有的接口中添加新的方法定义,例如Java里的集合API。这样类似Hibernate这样的第三方库无需重复实现这些集合API的所有方法,因为已经提供了一些默认方法。下面是如何在接口中定义方法的示例:publicinterfaceCollectionextendsIterable{Collectionfilter(Predicatep)  default{returnCollections.filter(this,p);}}Java8对混入的模拟现在我们来通过VEM实现一个混入效果,不过事先警告的是:请不要在工作中使用!下面的实现不是线程安全的,而且还可能存在内存泄露问题,这取决于你在类中定义的hashCode和equals方法,这也是另外一个缺点,我将在后面讨论这个问题。首先我们定义一个接口(模拟状态Bean)并提供方法的默认定义:publicinterfaceSwitchableMixin{ booleanisActivated()default{returnSwitchables.isActivated(this);} voidsetActivated(booleanactivated)default{Switchables.setActivated(this,activated);}}然后我们定义一个工具类,包含一个Map实例来保存实例和状态的关联,状态通过工具类中的私有的嵌套类代表:publicfinalclassSwitchables{ privatestaticfinalMapSWITCH_STATES=newHashMap<>(); publicstaticbooleanisActivated(SwitchableMixindevice){  SwitchableDeviceStatestate=SWITCH_STATES.get(device);  returnstate!=null&&state.activated; } publicstaticvoidsetActivated(SwitchableMixindevice,booleanactivated){  
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

详解Java中的Lambda表达式

文档大小:15KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用