bar*_*ssa 0 java guava java-stream option-type java-17
我遇到一个特定的用例,如果对象为空,我经常需要将它们包装起来Optional。看一下这段代码:
List<AbstractCorporateAction> cas = stream.toList();
if (cas.isEmpty()) return Optional.empty();
else return Optional.of(cas);
Run Code Online (Sandbox Code Playgroud)
我检查列表是否为空,如果确实为空,则返回一个空可选,如果不是,则将其包装。原因是有时我得到列表本身的空值,有时我得到一个实际的列表,但它是空的。
通过这种方法,当返回的可选本身为空时,我不需要仔细检查底层列表。
但对于不同的数据结构,实现方式有所不同。是否有第三方库的内置方法可以实现此目的?我得到的最接近的是 fromGuava.MoreObjects#isEmpty但它只检查对象是否为空,并且在它为空的情况下不返回可选值。
我可以为此编写自己的封面,但我正在寻找一种专业、可靠的方法来实现所需的功能。
Optional我遇到一个特定的用例,如果对象为空,我经常需要将它们包装起来Run Code Online (Sandbox Code Playgroud)List<AbstractCorporateAction> cas = stream.toList(); if (cas.isEmpty()) return Optional.empty(); else return Optional.of(cas);
你Optional在这里滥用,因为stream.toList()永远不会给你null。您可以返回流生成的列表,用可选值包装它是多余的。
可选只是一个值的容器,可能存在也可能不存在,并且无论它是否为空,您都可以安全地与其交互。集合本质上也是数据的容器。因此,用可选值包装集合除了带来不便之外,什么也得不到。这就像将一个盒子放入另一个盒子中一样,这会增加获取实际内容的工作量。
以下引用Java 语言架构师Brian Goetz的回答:
我们的目的是为库方法返回类型提供一种有限的机制,其中需要有一种明确的方式来表示“无结果”,并且使用
null这种机制极有可能导致错误。例如,您可能永远不应该将它用于返回结果数组或结果列表的内容;相反,返回一个 空数组或列表。
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |