guava Optional
測試代碼
public static void main(String[] args) { Optional<Integer> object1 = Optional.of(Integer.valueOf(1)); Optional<Integer> object2 = Optional.absent(); Optional<Integer> object3 = Optional.fromNullable(Integer.valueOf(1)); System.out.println(object1.get()); System.out.println(object1.or(Integer.valueOf(3))); System.out.println(object1.orNull()); if (object1.isPresent()){ System.out.println("object1 present"); } try { System.out.println(object2.get()); }catch (Exception e){ System.out.println("exception when get absent object"); } System.out.println(object2.or(Integer.valueOf(3))); System.out.println(object2.orNull()); if (object2.isPresent()){ System.out.println("object2 present"); } System.out.println(object3.get()); System.out.println(object3.or(Integer.valueOf(3))); System.out.println(object3.orNull()); if (object3.isPresent()){ System.out.println("object3 present"); } }
運行結果
1
1
1
object1 present
exception when get absent object
3
null
1
1
1
object3 present
小結
在Guava中一個Optional對象可以包含一個非空的對象,每一個Optional實例要麼包含一個非空的對象,要麼什麼都不包含,不會出現包含一個空引用的情況。因此一個Optional對象定義了兩種類型來分別表示它們: Present和Absent。
根據具體的需要,創建不同的Optional實例:
創建一個包含非空對象的Optional: Optional.of(T)
創建一個不包含對象的Optional: Optional.absent()
從一個可空的對象返回的Optional: Optional.fromNullable(T)
每一個實例此時就可以通過實例方法來獲得被包裝的對象:
T get() 返回被包含的對象,如果實例是Absent,則拋出IllegalStateException
T or(T) 返回被包含的對象,如果實例是Absent,返回參數指定的對象
T orNull() 返回被包含對象,如果實例是Absent,返回Null
ps, guava的optional方法已經被java8採用,用法類似。