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