我想将 Optional 用于返回列表的方法
假设函数是
public Output getListOfSomething() {
// In some cases there is nothing to return and hence it makes sense to have return
// type as Optional here
}
因此函数看起来像:
public Optional<List<String>> getListOfSomething() {
// return something only when there is some valid list
}
如果列表存在,现在我想做一些事情,比如:
Optional<List<String>> listOfSomething = getListOfSomething();
int size = 0;
listOfSomething.ifPresent(size = listOfSomething.get().size());
我是 Optional 的新手,已经阅读了有关 Optional 的文章,看起来这应该可以工作,但是我的 IDE 中出现语法错误:
method ifPresent is not applicable for the arguments (void).
我想从可能更熟练使用 Java 8 中的 lamda 的开发人员那里获得一些帮助。
最佳答案
在这里考虑语义很重要。
您的方法可以返回一个列表,或“无列表”。
如果它返回一个列表,它可能会返回一个空列表。
您应该问,“是否有区分空列表和无列表的语义原因?”有时有一个很好的设计理由来产生差异,但这种情况很少见。在决定 Empty 和 Null 在您的情况下是不同的之前,请仔细考虑。避免无列表的部分原因是它减少了客户端代码必须考虑的“特殊情况”。例如,如果他们必须对返回的每个项目执行某些操作,但您也可以返回 null,则他们必须在进入 for each 循环之前对 null 进行特殊检查。如果列表为空,则 for each 不执行任何操作。
如果您的问题域中的“无列表”与“空列表”不同,那么返回包装类有时会很有用,它可以帮助客户端代码区分这些情况,并适本地处理它们。 Optional
就是这样一个通用类,但您的领域可能需要更具体的东西(即使它模仿 Optional 的功能,它可能有更好的语义定义)。
关于java - 将 Java 8 Optional 用于字符串列表作为输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30095651/