使用Java8Optional的正确姿势.doc

使用Java8Optional的正确姿势.doc

ID:51698694

大小:50.45 KB

页数:6页

时间:2020-03-15

使用Java8Optional的正确姿势.doc_第1页
使用Java8Optional的正确姿势.doc_第2页
使用Java8Optional的正确姿势.doc_第3页
使用Java8Optional的正确姿势.doc_第4页
使用Java8Optional的正确姿势.doc_第5页
资源描述:

《使用Java8Optional的正确姿势.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、使用Java8Optional的正确姿势——动力节点java我们知道Java8增加了一些很有用的API,其中一个就是Optional.如果对它不稍假探索,只是轻描淡写的认为它可以优雅的解决NullPointException的问题,于是代码就开始这么写了.Optionaluser=......if(user.isPresent()){returnuser.getOrders();}else{returnCollections.emptyList();}那么不得不说我们的思维仍然是在原

2、地踏步,只是本能的认为它不过是User实例的包装,这与我们之前写成Useruser=.....if(user!=null){returnuser.getOrders();}else{returnCollections.emptyList();}实质上是没有任何分别.这就是我们将要讲到的使用好Java8Optional类型的正确姿势.在里约奥运之时,新闻一再提起五星红旗有问题,可是我怎么看都看不出来有什么问题,后来才道是小星星膜拜中央的姿势不对.因此我们千万也别对自己习以为常的事情觉得理所当然,丝

3、毫不会觉得有何不妥,换句话说也就是当我们切换到Java8的Optional时,不能继承性的对待过往null时的那种思维,应该掌握好新的,正确的使用Java8Optional的正确姿势.直白的讲,当我们还在以如下几种方式使用Optional时,就得开始检视自己了1.调用 isPresent() 方法时2.调用 get() 方法时3.Optional类型作为类/实例属性时4.Optional类型作为方法参数时isPresent() 与 obj!=null 无任何分别,我们的生活依然在步步惊心.而没有

4、 isPresent() 作铺垫的 get() 调用在IntelliJIDEA中会收到告警Reportscallstojava.util.Optional.get()withoutfirstcheckingwithaisPresent()callifavalueisavailable.IftheOptionaldoesnotcontainavalue,get()willthrowanexception.(调用Optional.get()前不事先用isPresent()检查值是否可用.假如Opti

5、onal不包含一个值,get()将会抛出一个异常)把Optional类型用作属性或是方法参数在IntelliJIDEA中更是强力不推荐的Reportsanyusesofjava.util.Optional,java.util.OptionalDouble,java.util.OptionalInt,java.util.OptionalLongorcom.google.common.base.Optionalasthetypeforafieldoraparameter.Optionalwas

6、designedtoprovidealimitedmechanismforlibrarymethodreturntypeswherethereneededtobeaclearwaytorepresent“noresult”.Usingafieldwithtypejava.util.OptionalisalsoproblematiciftheclassneedstobeSerializable,whichjava.util.Optionalisnot.(使用任何像Optional的类型作为字段或方

7、法参数都是不可取的.Optional只设计为类库方法的,可明确表示可能无值情况下的返回类型.Optional类型不可被序列化,用作字段类型会出问题的)所以Optional中我们真正可依赖的应该是除了 isPresent() 和 get() 的其他方法:1.publicOptionalmap(Functionmapper)1.publicTorElse(Tother)2.publicTorElseGet(Supplieroth

8、er)3.publicvoidifPresent(Consumerconsumer)4.publicOptionalfilter(Predicatepredicate)5.publicOptionalflatMap(Function>mapper)6.publicTorElseThrow(SupplierexceptionSupplier)th

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。