使用许多新方法扩展了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
如果我有遗留代码,则如下所示:
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);
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。