轉自:
http://www.java265.com/JavaCourse/202206/3724.html
Optional簡介
Optional是java8中新增的API
用于完美解決空指標例外
使用Optional類可避免顯式的空值判斷
所以筆者在jdk1.8的環境下,大量的使用Optional這個容器
例: Optional可檢測一個null容器
如:
Optional.ofNullable(null)
此時當isPresent方法回傳true時
呼叫get()方法則可回傳其物件
下文筆者將著重講述Optional中的 orElse()、orElseGet() 例:
未使用Optional的代碼
if (user != null) {
return user.getOrders();
}
else {
return Collections.emptyList();
}
使用Optional后的代碼
Optional<User> user = ......
if (user.isPresent()) {
return user.getOrders();
}
else{
return Collections.emptyList();
}
那么正確的Optional獲取值的寫法,筆者建議使用orElse和orElseGet獲取
orElse:
當Optional實體有值則將其回傳
否則回傳orElse方法傳入的引數
public T orElse(T other)
引數:other
需要被回傳的值
回傳
當只存在時回傳值
不存在回傳other(自定義值)
例
//呼叫工廠方法創建Optional實體
Optional<String> name = Optional.of("java265.com");
//創建一個空實體
Optional empty = Optional.ofNullable(null);
//創建一個不允許值為空的空實體
Optional noEmpty = Optional.of(null);
//當值不為null,orElse方法回傳Optional實體的值
//當為null,回傳傳入的訊息
//輸出java265.com
System.out.println(name.orElse("other value!"));
//輸出:最愛java
System.out.println(empty.orElse("最愛java"));
//拋NullPointerException 因為of中不允許傳入Null
System.out.println(noEmpty.orElse("例外");
orElseGet簡介
orElseGet與orElse方法類似
區別在于得到的默認值
orElse方法將傳入的字串作為默認值
orElseGet方法可以接受Supplier的實作用來生成默認值
public T orElseGet(Supplier<? extends T> other)
引數:繼承Supplier介面的other
當值為null的時候回傳
回傳:
值存在回傳值,值不存在回傳other
例外:
當不允許值為空的情況(如)下值為空時或other無效拋NullPointerException
例
//orElseGet可以接受一個lambda運算式生成默認值, //輸出:java265.com System.out.println(name.orElseGet(() -> ``"it's value"``)); //輸出:No value System.out.println(empty.orElseGet(() -> ``"No value"``)); //拋出NullPointerException System.out.println(noEmpty.orElseGet(() -> ``"it's value"``));
orElseThrow簡介
當Optional有值時,
則將其回傳
否則拋出Supplier介面創建的例外
orElseThrow語法說明:
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
throws X extends Throwable
引數:exceptionSupplier 一個拋例外的實體化Supplier
回傳:當前值或當值為null拋出例外
例外:當不允許值為空的時候以及exceptionSupplier為空拋NullPointerException;值為空拋Supplier繼承的例外
通過上面的對比我們可發現orElse,orElseGet,orElseThrow三者的區別: orElse:回傳內容 orElseGet:回傳實作了Supplier的內容 orElseThrow:直接回傳例外資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/514142.html
標籤:其他
