美文网首页
【Guava】Optional接口来避免空指针错误

【Guava】Optional接口来避免空指针错误

作者: 端木轩 | 来源:发表于2017-08-22 09:09 被阅读52次

null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投入使用的时候,空指针异常出现了,这是一种讨厌的情况。

鉴于此google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方法of时,如果传入的参数为null就抛出NullPointerException异常。

使用Optional<T>除了简化粗鲁的if(null == object)、降低函数的复杂度、增加可读性之外,它是一种傻瓜式的防护,Optional<T>引导编码人员主动的思考引用为null的情况。

1.Optional<T> 创建实例

创建实例 描述
Optional.of(T) 若引用为null则快速失败,抛出异常 java.lang.NullPointerException
Optional.absent() 创建引用缺失的Optional实例
Optional.fromNullable(T) 引用为null则表示缺失

2.Optional<T>查询引用

常用方法 描述
boolean isPresent() 包含的引用非null的(引用存在),返回true
T get() 返回包含的内容,则抛出java.lang.IllegalStateException
T or(T) 返回包含的内容,如果为空,则返回指定的值
T orNull 返回包含的内容,如果为空,则返回null
Set<T> asSet() 如果引用存在,返回只有单一元素的集合;如果引用缺失,返回空集合。
<V> Optional<V> transform() 引用存在,则它被转换给定的功能;否则absent()被返回。
<T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) 将参数optionals中为null的optional剔除,同时返回值对象的Iterable

3.代码示例

1.基本用法

Optional<Integer> possible = Optional.fromNullable(5);//创建允许null值的Optional
System.out.println(possible.isPresent());
System.out.println(possible.get());            // 5
System.out.println(possible.or(3));            // 5
System.out.println(possible.orNull());        // 5
System.out.println(possible.asSet());        // [5]

2.presentInstances

List<Optional<Integer>> list = new ArrayList<>();
for (int index = 10; index > 0; --index) {
    Integer t;
    if (0 == index % 2) {
        t = index;
    } else {
        t = null;
    }
    list.add(Optional.fromNullable(t));
}
Iterable<Integer> it = Optional.presentInstances(list);
it.forEach(System.err::println);

//输出结果为:
//10
//8
//6
//4
//2

相关文章

  • 【Guava】Optional接口来避免空指针错误

    null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在...

  • Optional工具

    描述: 可以用Optional来避免空指针。 构造方法: 其他常用方法

  • JDK8-Optional

    Optional是JDK8中提供用于包含未知对象的工具类,即可以利用Optional包装对象来避免繁琐的空指针检查...

  • java 8中使用Optional 避免空指针

    Optional 类的引入要求程序员强制处理和避免空指针。Optional 需要使用在可能为null的变量上。很多...

  • 4. Java8 Optional 容器类

    Optional容器类 用于尽量避免空指针异常 1.方法 静态方法 实例 empty 其他常用方法

  • Optional避免空指针的用法

    从一个简单的用例开始。在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerExc...

  • 5.Java8新特性 - Optional容器类

    一.Optional简介 Optional是一个容器类,代表一个值存在或者不存在,可以避免空指针异常 二.常用方法...

  • 一起来学Java8(六)——Optional

    Optional类是Java8新增的一个类,其作用可以有效避免空指针异常。 Optional类的代码比较简单,很容...

  • Optional

    首先,Optional 它不是一个函数式接口,设计它的目的是为了防止空指针异常(NullPointerExcept...

  • Java 9 改进的 Optional 类

    Optional 类在 Java 8 中引入,Optional 类的引入很好的解决空指针异常。 Optional ...

网友评论

      本文标题:【Guava】Optional接口来避免空指针错误

      本文链接:https://www.haomeiwen.com/subject/vmukdxtx.html