java8 orElse,orElseGet,orElseThrow的使用


這3個都是用來處理null的情況:
orElse 用的是括號內的對象
orElseGet 用的是Supplier接口返回的對象。 supplier接口就一個get方法。
無入參,出參要和Optional的對象同類型。
orElseThrow 用的是Supplier接口返回的對象,這個對象必須要實現Throwable。 supplier接口就一個get方法。 無入參,出參要實現Throwable.

orElse 代碼
//orElse 有,就用自身值。 為null,就用orElse后面的值。
//有正品用正品,沒正品用替代品
System.out.println(Optional.ofNullable("正品").orElse("替代品")); // orElse
System.out.println(Optional.ofNullable(null).orElse("替代品"));

 


orElseGet代碼
// orElseGet 它可以傳入一個supplier接口,里面可以花樣實現邏輯
System.out.println(Optional.ofNullable("寶馬").orElseGet(()->"走路")); // 有寶馬就不用走路
System.out.println(Optional.ofNullable(null).orElseGet(()->"自行車")); // 沒寶馬,可以騎自行車
System.out.println(Optional.ofNullable(null).orElseGet(()->"電動車")); // 沒寶馬,也可以騎電動車

 


有人會說orElse和orElseGet沒看出有什么區別啊。
區別是orElseGet可以傳入一個接口,來定制邏輯。

orElseThrow代碼
// 有錢就沒異常
try {
System.out.println(Optional.ofNullable("車").orElseThrow(()->new Exception())); // 有車不會拋異常
} catch (Throwable throwable) {
throwable.printStackTrace();
}

// 沒錢就會拋異常
try {
System.out.println(Optional.ofNullable(null).orElseThrow(()->new Exception())); // 沒錢車拋異常
} catch (Throwable throwable) {
throwable.printStackTrace();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM