本文介紹了對象與可選,哪個更可取?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
使用許多新方法擴展了java.util.Objects類
Objects#requireNonNullElse
分別
Java-9
中的Objects#requireNonNullElseGet()。
如果第一個參數為非空,則兩者都將返回第一個參數,否則將返回第二個非空參數或Supplier.get()的非空值
jshell> String nullStr = null;
nullStr ==> null
jshell> Objects.requireNonNullElse(nullStr,"lorem ipsum");
$13 ==> "lorem ipsum"
jshell> Objects.requireNonNullElseGet(nullStr,() -> "lorem ipsum");
$14 ==> "lorem ipsum"
但新功能與Optional
類Optional#orElse和Optional#orElseGet中已有的功能重疊
jshell> Optional.ofNullable(nullStr).orElse("lorem ipsum");
$17 ==> "lorem ipsum"
jshell> Optional.ofNullable(nullStr).orElseGet(() -> "lorem ipsum");
$18 ==> "lorem ipsum"
Objects
中的新方法與對應的Optional
方法之間的唯一區別是供應商的第二個參數或值必須為非空,否則Objects
拋出NPE
:
jshell> Objects.requireNonNullElseGet(nullStr,() -> null);
| java.lang.NullPointerException thrown: supplier.get()
| at Objects.requireNonNull (Objects.java:246)
| at Objects.requireNonNullElseGet (Objects.java:321)
| at (#15:1)
jshell> Objects.requireNonNullElse(nullStr,null);
| java.lang.NullPointerException thrown: defaultObj
| at Objects.requireNonNull (Objects.java:246)
| at Objects.requireNonNullElse (Objects.java:301)
| at (#16:1)
與Optional
jshell> Optional.ofNullable(nullStr).orElse(null);
$19 ==> null
jshell> Optional.ofNullable(nullStr).orElseGet(() -> null);
$20 ==> null
為什么JDK開發人員沒有更新可選中的現有方法
類?
他們為什么不引入一個新的方法(它將拋出
如果第二個參數為空,則為NPE)到可選類?
現在我們應該使用什么可選的或對象?
新方法是否使對象比可選方法更可取,因為它們
將立即拋出NPE,而不是稍后拋出代碼中的某個地方
就像可選?
如果我有遺留代碼,則如下所示:
String str = null;
String result = str == null ? "other string" : str;
這只是一個方法內部的簡單檢查。我想使用最新的語言功能對其進行重新分解。現在,請注意Optional.orElse
和Objects.requireNonNullOrElse
哪個更可取?
result = Optional.ofNullable(str).orElse("other string");
或
result = Objects.requireNonNullOrElse(str,"other string);
推薦答案
您的問題”哪個更好?”是開發人員最喜歡的