我正在将代码重构为 Java 8,并且想用Optional 替换空检查。
public Employee findEmployeeById(String id) {
List<Employee> empList = .. //some db query
return (empList.isEmpty() ? null : empList.get(0));
}
Optional.ofNullable(empList.get(0))
不会像抛出时那样工作IndexOutofBoundException
或者我应该理想地用 null 替换Optional.empty()
?
正如@Jesper在评论中已经提到的,你必须检查列表是否为空,然后返回一个空Optional
.
public Optional<Employee> findEmployeeById(String id) {
List<Employee> empList = .. //some db query
return empList.isEmpty() ? Optional.empty() : Optional.of(empList.get(0));
}
An Optional
是一个潜在的包装null
允许您避免显式检查的值null
当你使用它时。
看看可选文档 https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html看看它提供了什么功能。
例如,您可以获取员工的姓名,如果不存在,则可以获取“未知”,而无需检查null
:
Optional<Employee> emp = findEmployeeById(id);
String name = emp.map(Employee::getName).orElse("unknown");
您可以阅读这篇关于可选用途的文章 https://stackoverflow.com/questions/23454952/uses-for-optional看看它对你来说是否有意义Optional
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)