前言NPE(NullPointerException)一直是Java程序员最痛恨的异常。冗长的非空检查使得代码的可读性和优雅性大打折扣。所以在这篇文章中,笔者将详细介绍Java8引入的特性——Optional类,看看它是如何避免空指针异常的。什么是选项?Optional是一个容器对象,它可能包含也可能不包含非空值。如果该值存在,isPresent()将返回true,而get()将返回该值。提供的其他方法取决于包含的值是否存在,例如orElse()(如果值不存在则返回默认值)和ifPresent()(如果值存在则执行一段代码)。这是一个基于价值的课程;在Optional实例上使用身份敏感操作,包括引用相等性(==)、身份哈希码或同步,可能会产生不可预知的结果,应该避免。Optional解决了什么问题?在Java8之前,我们像这样进行对象验证:publicStringgetCity(Useruser){if(user!=null){Addressaddress=user.getAddress();if(address!=null){返回地址。得到城市();}else{返回“北京”;}}else{返回“北京”;}}Java8写法:publicStringgetCity(Useruser){returnOptional.ofNullable(user).map(u->u.getAddress()).map(address->address.getCity()).orElse("北京");}方法详细说明empty说明返回一个空的Optional实例。源代码publicstaticOptionalempty(){@SuppressWarnings("unchecked")Optionalt=(Optional)EMPTY;returnt;}用法Optional