对象与可选,哪个更可取?

发布时间:2022-05-08 / 作者:清心寡欲
本文介绍了对象与可选,哪个更可取?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用许多新方法扩展了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.orElseObjects.requireNonNullOrElse哪个更可取?

result = Optional.ofNullable(str).orElse("other string");

result = Objects.requireNonNullOrElse(str,"other string);

推荐答案


声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。