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

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

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

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

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
相关文章
相关标签/搜索