【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
相關文章
相關標籤/搜索