zoukankan      html  css  js  c++  java
  • 【Guava】Optional接口来避免空指针错误

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

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

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

    1.Optional 创建实例

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

    2.Optional查询引用

    常用方法 描述
    boolean isPresent() 包含的引用非null的(引用存在),返回true
    T get() 返回包含的内容,则抛出java.lang.IllegalStateException
    T or(T) 返回包含的内容,如果为空,则返回指定的值
    T orNull 返回包含的内容,如果为空,则返回null
    Set asSet() 如果引用存在,返回只有单一元素的集合;如果引用缺失,返回空集合。
    Optional transform() 引用存在,则它被转换给定的功能;否则absent()被返回。
    Iterable 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
    
  • 相关阅读:
    Linux服务器之间进行文件目录映射/挂载 nfs rpcbind
    计算机英语Computer English
    收藏的网站
    java 通过sftp服务器上传下载删除文件
    收藏的博客
    MySQL练习题(简单查询)
    MySQL练习题
    Comparable接口和Comparator接口的使用和区别
    排序算法:快速排序
    排序算法:插入排序
  • 原文地址:https://www.cnblogs.com/f-zhao/p/7409886.html
Copyright © 2011-2022 走看看