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時返回指定的值,還可以做點其他的事。
沒有留言:
張貼留言