【发布时间】:2020-06-27 15:29:25
【问题描述】:
假设我有这样的布局:
public void caller(@NonNull List<Integer> param){
// param COULD BE EMPTY, but it CANNOT be NULL, its not nullable
if(!param.isEmpty()) function(Optional.of(param));
// If param is empty then just dont call "function"
}
public void function(Optional<List<Integer>> someParam){
someParam.ifPresent(...);
}
问题来了:基于空列表创建Optional 的用法不正确吗?我的困惑是我们是否应该提供 Optional 无论caller 中的param 是否为空,因为它不为空,但我想知道这是否是正确的用法?
【问题讨论】:
-
如果
param不能为空,我看不出将其包装在 Optional 中的意义。 -
Optional主要旨在为方法提供一种清晰的方式来表示它们可能会返回 null 结果作为其签名的一部分。任何时候你将它用于其他目的时,问问自己是否有令人信服的理由使用它。如果你想不出一个,你就不应该使用它。在这种情况下,我看不到一个。 -
大多数时候,
Optional和Collection(List、Set等)子类型不应一起使用,因为空集合几乎总是具有相同的语义作为一个空的可选项。 -
空状态太多:someParam 可能是
null、Optionial.empty()或Optional.of(List.of())。
标签: java oop if-statement functional-programming optional