這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();
}
