在Java中,如果你尝试对null做函数调用,就会引发NullPointerException(NPE),NPE是Java程序开发中的典型的异常,对于Java开发者来说,无论你是初出茅庐的新人和还工作多年的老司机,NPE经常让他们翻车。为了避免NPE,他们会加很多if判断语句,使得代码的可读性变得很差。
从软件设计的角度来看,null本身是没有意义的语义,这是一种对缺失变量值的错误的建模。
从Java类型系统的角度看,null可以被赋值给任何类型的变量,并且不断被传递,知道***谁也不知道它是从哪里引入的。
Optional的引入
Java设计者从Haskell和Scala中获取灵感,在Java 8中引入了一个新的类 java.util.Optional
Optional的目的就在于此:通过类型系统让你的领域模型中隐藏的知识显式地体现在你的代码中。
Optional的使用
上面这张表里列举了Optional的基础API,我这里列举了一些使用的tips:
使用工具类方法改良可能抛出异常的API
Java方法处理异常结果的方式有两种:返回null(或错误码);抛出异常,例如:Integer.parseInt(String)这个方法——如果无法解析到对应的整型,该方法就抛出一个NumberFormationException,这种情况下我们一般会使用try/catch语句处理异常情况。
一般我们建议将try/catch块单独提取到一个方法中,在这里使用Optional设计这个方法,代码如下。在开发中,可以尝试构建一个OptionalUtility工具类,将这些复杂的try/catch逻辑封装起来。
现在有个方法,是尝试从一个属性映射中获取某个关键词对应的值,例子代码如下:
使用Optional的写法后,代码如下所示:
如果需要访问的属性值不存在,Properites.getProperty(String)方法的返回值就是一个null,使用noNullable工厂方法就可以将该值转换为Optional对象;接下来,可以使用flatMap将一个Optional
使用Optional的思路和Stream相同,都是链式思路,跟数据库查询似的,表达力很强,而且省去了哪些复杂的try/catch和if-then-else方法。在后面的开发中,可以使用Optional设计API,这样可以设计出更安全的接口和方法。
网站栏目:巧用Optional摆脱NullPointExcept的折磨
分享URL:http://www.csdahua.cn/qtweb/news44/369194.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网