什么! 你还在使用 if (xxx != null) 做 NullPointerException 判断?
如果有这样一个嵌套对象User,嵌套了用户的地址Address,此时我们要获取地址中的邮政编码的值,通常我们会采用以下代码编写获取该值:
但在以上代码中,只要任意一个对象的值为NULL时,都可能导致NullPointerException异常。如果我们需要确保不触发异常,就需要在访问每一个值之前,对其进行NULL值检查:
但这样的代码很容易就变得冗长了,一次取值三次判断NULL值。那有没有什么更简洁的代码可以优化此类操作呢?
在Java 8.0之后,新增了一个工具类Optional,Optional类封装了一些方法,包括判断NULL值方法,主要用来解决空指针异常(NullPointerException)问题,Optional结合函数编程可以优化以上多层NULL值判断代码。在优化以上代码之前,先让我们来了解下Optional类。
我们先通过一个简单判断一个字符串是否为空的例子来了解下Optional类:
以上代码中,Optional类中of方法用来实例化,isPresent方法则判断值是否为NULL。除此之外,我们再了解Optional工具类中的其他几个主要方法。
ofNullable
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。可为空的Optional
map
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
flatMap
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。
orElse
如果有值则将其返回,否则返回指定的其它值。
通过以上例子,我们可以使用Optional类将最开始的复杂代码简化成以下一行代码:
上面的代码可通过方法引用(method references)做进一步精简:
版权声明: 本文为 InfoQ 作者【刘超】的原创文章。
原文链接:【http://xie.infoq.cn/article/155a891b71478796d39f40d8f】。文章转载请联系作者。
评论