如何在 Java8 中风骚走位避开空指针异常

栏目: 编程语言 · Java · 发布时间: 7年前

内容简介:文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/作者:犬小哈   来源:小哈学java要说 Java 编程中哪个异常是你印象最深刻的,那

文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/

如何在  <a href='https://www.codercto.com/topics/22013.html'>Java</a> 8 中风骚走位避开空指针异常

作者:犬小哈   来源:小哈学java

要说 Java 编程中哪个异常是你印象最深刻的,那 NullPointerException 空指针可以说是臭名昭著的。不要说初级 程序员 会碰到,即使是中级,专家级程序员稍不留神,就会掉入这个坑里。

Null 引用的发明者 Tony Hoare 曾在 2009 年作出道歉声明,声明中表示,到目前为止,空指针异常大约给企业已造成数十亿美元的损失。

下面是 Tony Hoare 的原话:

我将 Null 引用的设计称为是一个数十亿美元的错误。1965 那年,我正在用面向对象语言(ALGOL W) 设计首个功能全面的系统。当时我的考量是,确保所有被使用的引用都是安全的,编译器会自动进行检查。但是,我没有抵住诱惑,加入了 Null 引用,仅仅是为了实现起来省事。这之后,它导致了数不清的 bug、错误和系统崩溃,也为企业导致了不可估量的损失。

事已至此,我们必须学会面对它。So, 我们要如何防止空指针异常呢?

唯一的办法就是对可能为 Null 的对象添加检查。但是 Null 检查是繁琐且痛苦的。所以一些比较新的语言为了处理 Null 检查,特意添加了特殊的语法,如空合并运算符。

在 Groovy 或 Kotlin 这样的语言中也被称为 Elvis 运算符。

不幸的是,在老版本的 Java 中并没有提供这样的语法糖。Java8 中在这方面做了改进。所以,这篇文章就特意来介绍一下如何在 Java8 中利用新特性来编写防止 NullPointerException 的发生。

Java8 中如何加强对 Null 对象的检查?

在上篇文章 Java8 新特性指导手册 中简单的提了一下如何通过 Optional 类来对对象做空校验。接下来,我们再细说一下:

如何在 Java8 中风骚走位避开空指针异常

在业务系统中,对象中嵌套对象是经常发生的场景,如下示例代码:

业务中,假设我们需要获取 Outer 对象对底层的 Inner 中的 foo 属性,我们必须写一堆的非空校验,来防止发生 NullPointerException

通过 Optional

在 Java8 中,我们有更优雅的解决方式,那就是使用 Optional 是说,我们可以在一行代码中,进行流水式的 map 操作。而 map 方法内部会自动进行空校验

通过 suppiler 函数自定义方法

上面这种方式个人感觉还是有点啰嗦,我们可以利用 suppiler 函数来出一个终极解决方案:

利用上面的 resolve 方法来重构上述的非空校验代码段:

最后

你需要知道的是,上面这两个解决方案并没传统的 null 检查性能那么高效。但在绝大部分业务场景下,舍弃那么一丢丢的性能来方便编码,是完全可取,除非是那种对性能有严格要求的,我们才不建议使用。

个人觉得,真要拿这点性能说事,还不如去优化优化 sql 语句,业务逻辑等。

如何在 Java8 中风骚走位避开空指针异常

如何在 Java8 中风骚走位避开空指针异常

如何在 Java8 中风骚走位避开空指针异常


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Web Designer's Idea Book

The Web Designer's Idea Book

Patrick Mcneil / How / 2008-10-6 / USD 25.00

The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具