網頁

2018/8/29

Java 8 Optional orElse() 與 orElseGet() 的差別

Java 8 新加入的Optional類別是設計來處理null的容器,而其orElse()orElseGet()的差別如下。

orElse()orElseGet()皆為當Optional的內容物為null時,用來返回其他結果。

orElse()直接以傳入的參數做為回傳值;orElseGet()則是傳入一個Supplier類別,透過實作Supplier.get()來返回值。

另一個差異是,在Optional中不為null時,orElse()的參數若為new一個新的物件則該仍會初始化,而orElseGet()不會執行Supplier.get()

相同地是,兩方法回傳的物件型態都必須同Optional裝載的物件型態或其子類別。

String s = null;
System.out.println(Optional.ofNullable(s).orElse("hello")); // hello

System.out.println(Optional.ofNullable(s).orElseGet(() -> { 
    System.out.print("za ");
    return "warudo";
})); // za warudo

也因此orElseGet()除了在null時返回指定的值,還可以做點其他的事。

沒有留言:

張貼留言