Java8:使用 Optional 处理 null】的更多相关文章

如何处理null 怎样做才能避免不期而至的NullPointerException呢?通常,可以在需要的地方添加null的检查(过于激进的防御式检查甚至会在不太需要的地方添加检测代码),并且添加的方式往往各有不同. null-安全的第一种尝试:深层质疑 “深层质疑”,原因是它不断重复着一种模式:每次不确定一个变量是否为null时,都需要添加一个进一步嵌套的if块,也增加了代码缩进的层数.很明显,这种方式不具备扩展性,同时还牺牲了代码的可读性. null-安全的第二种尝试:过多的退出语句 第二种尝…
写在前头 今天再看阿里的Java开发手册,里面异常处理第10条提到这样一个建议. [推荐]防止 NPE ,是程序员的基本修养,注意 NPE 产生的场景:1 ) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE.反例: public int f() { return Integer 对象}, 如果为 null ,自动解箱抛 NPE .2 ) 数据库的查询结果可能为 null .3 ) 集合里的元素即使 isNotEmpty ,取出的数据元素也可能为 null…
目录 Optional概述 Optional简单案例 Optional的主要方法 参考阅读 Optional概述 Optional 是个容器:它可以保存类型T的value,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测,很好地解决了空指针异常处理的问题,比如可以使用isPresent()方法判断value是否为null,使用get()方法获取value值等等. Optional的构造方法是私有的,实例不能new,可以使用静态方法来创建: // 1.创建一…
空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码.受到Google Guava的启发,Optional类已经成为Java 8类库的一部分.Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测. Optional.of()或者Optional.of…
写过 Java 程序的同学,一般都遇到过 NullPointerException :) —— 为了不抛出这个异常,我们便会写如下的代码: User user = getUserById(id); if (user != null) { String username = user.getUsername(); System.out.println("Username is: " + username); // 使用 username } 但是很多时候,我们可能会忘记写 if (use…
Optional类这是Java 8新增的一个类,用以解决程序中常见的NullPointerException异常问题,本篇文章将详细介绍Optional类,以及如何用它消除代码中的null检查. 1.创建optional对象 empty() 方法用于创建一个没有值的Optional对象: Optional<String> emptyOpt = Optional.empty(); of() 方法使用一个非空的值创建Optional对象: String str = "Hello Worl…
Java8引入了java.util.Optional<T>,它是一个封装的Optional值的类.变量存在时,Optional类只是对类简单封装.变量不存在时,缺失的值会被建模成一个空的Optional对象,由方法Optional.empty()返回.Optional.empty()是一个静态工厂方法,返回Optional类的特定单一实例. 在代码中应始终如一的使用Optional,能非常清晰地界定出变量值的缺失时结构上的问题还是算法上的缺陷,抑或是数据中的问题.引入Optional并非要消除…
1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了null引用的想法.ALGOL W是第一批在堆上分配记录的类型语言之一.Hoare选择null引用这种方式,"只是因为这种方法实现起来非常容易".虽然他的设计初衷就是要"通过编译器的自动检测机制,确保所有使用引用的地方都是绝对安全的",他还是决定为null引用开个绿灯,因为他认为这是为"不存在的值"建模最容易的方式.很多年后,他开始为自己曾经做过这样的决定而…
使用optional的好处:是一个可以包含或不可以包含非空值的容器对象,更加友好的处理程序中的空对象. Optional<T>有方法 isPresent() 和 get() 是用来检查其包含的对象是否为空或不是,然后返回它,如: Optional<SomeType> someValue = someMethod(); if (someValue.isPresent()) { // check someValue.get().someOtherMethod(); // retriev…
NullPointerException,大家应该都见过.这是Tony Hoare在设计ALGOL W语言时提出的null引用的想法,他的设计初衷是想通过编译器的自动检测机制,确保所有使用引用的地方都是绝对安全的.很多年后,他对自己曾经做过的这个决定而后悔不已,把它称为“我价值百万的重大失误”.它带来的后果就是---我们想判断一个对象中的某个字段进行检查,结果发现我们查看的不是一个对象,而是一个空指针,他会立即抛出NullPointerException异常. 看下面这个例子: public c…