今天小编给大家分享一下Java的Optional能补充所有传统的if-null-else或if-not-null-else吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Java 添加的java.util.Optional
非常的受欢迎,并为总是不能返回非null值的方法提供了更流畅的代码。很不幸的是,Optional
已被滥用,一种滥用,甚至已被过度使用。当与直接使用相比null
没有明显优势时,我偶尔会遇到使用Optional
的代码。
当 Optional 与直接检查 null 相比没有任何优势,调用代码对它刚刚调用的方法的返回值使用Optional.ofNullable(T)
时,可能会提示一个危险信号。如同所有的“危险信号”,这并不意味着将方法将返回值传递个Optional.ofNullable(T)
(事实上,传递给期望 Optional 的 API 是必要的),但它的这种做法通常是用于不提供实际值,而不是直接使用返回值并检查它的是否为 null。
在 Optional 可用之前,用于检查 null 方法返回的代码以及对 null 响应采取一种方式和对非 null 响应采取另一种方式的代码如下所示)。
/**
* Demonstrates approach to conditional based on {@code null} or
* not {@code null} that is traditional pre-{@link Optional} approach.
*/
public void demonstrateWithoutOptional()
{
final Object returnObject = methodPotentiallyReturningNull();
if (returnObject == null)
{
out.println("The returned Object is null.");
}
else
{
out.println("The returned object is NOT null: " + returnObject);
// code processing non-null return object goes here ...
}
}
对于这个基本条件,很少需要涉及Optional。下一个代码片段代表了我在开发人员尝试使用Optional替换显式空检测时偶尔看到的代码类型:
/**
* Demonstrates using {@link Optional} in exactly the manner {@code null}
* is often used (conditional on whether the returned value is empty or
* not versus on whether the returned value is {@code null} or not).
*/
public void demonstrateOptionalUsedLikeNullUsed()
{
final Optional<Object> optionalReturn
= Optional.ofNullable(methodPotentiallyReturningNull());
if (optionalReturn.isEmpty())
{
out.println("The returned Object is empty.");
}
else
{
out.println("The returned Object is NOT empty: " + optionalReturn);
// code processing non-null return object goes here ...
}
}
此代码中的范式与传统的null检查代码基本相同,但使用Optional.isEmpty()
执行相同的检查。这种方法不会增加任何可读性或其他优势,但确实以额外的对象实例化和方法调用为代价。
上述用法的一个变体Optional是将其ifPresent(Consumer)
方法与其isEmpty()
方法结合使用,形成相同的基本逻辑,如果返回值存在则做一件事,如果返回值为空则做另一件事。这在以下代码中进行了演示。
/**
* Demonstrates using {@link Optional} methods {@link Optional#ifPresent(Consumer)}
* and {@link Optional#isEmpty()} in similar manner to traditional condition based
* on {@code null} or not {@code null}.
*/
public void demonstrateOptionalIfPresentAndIsEmpty()
{
final Optional<Object> optionalReturn
= Optional.ofNullable(methodPotentiallyReturningNull());
optionalReturn.ifPresent(
(it) -> out.println("The returned Object is NOT empty: " + it));
if (optionalReturn.isEmpty())
{
out.println("The returned object is empty.");
}
}
这段代码看起来比直接检查 的返回值的传统方法要短一些null,但仍然以额外的对象实例化为代价,并且需要两次方法调用。此外,首先检查 Optional 是否存在然后立即检查它是否为空感觉有点奇怪。此外,如果需要执行的逻辑比将消息写到标准输出更复杂,这种方法就变得不那么实用了。
以上就是“Java的Optional能补充所有传统的if-null-else或if-not-null-else吗”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。