我是一名有用的助手,可以为您翻译文本。
我需要将一个
简而言之,我的问题是:我们可以将
我需要将一个
Optional<EmployeeModel>
对象转换为Optional<EmployeeDto>
对象,并且我正在寻找比下面两个更好/更清晰的选项。
选项1:
public Optional<EmployeeDto> findById(String employeeId){
Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
return Optional.ofNullable(toEmployeeDto(toEmployeeDto.orElse(null)));
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
if(employeeModel != null) {//We need this because orElse passes null
//return EmployeeDto (convert EmployeeModel to dto)
} else {
return null;
}
}
选项2:
public Optional<EmployeeDto> findById(String employeeId){
Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
if(employeeModel.isPresent()) {
return Optional.of(toEmployeeDto(employeeModel.get()));
} else {
return Optional.empty();
}
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
//isPresent()check already done so no null checks
//return EmployeeDto (convert EmployeeModel to dto)
}
我不能直接使用Optional.map()
,因为EmployeeModel
对象可能为空(即被Optional
包装的null
),来自employeeService
。此外,我只是在检查Optional
类内部的map()
方法的源代码,它执行以下检查:
Objects.requireNonNull(mapper);
简而言之,我的问题是:我们可以将
null
对象传递给Optional
的map()
方法吗?如果可以,为什么源代码中要进行Objects.requireNonNull()
检查?
findBySomeOtherAttribute(String someValue)
的内容,那么Option1就是DRY的。如果它跨越多个类,那么if/else可以被提取到一个工厂类中。 - Andrew SemployeeService.findById
返回一个Optional
类型,然后返回null
而不是Optional.empty
,那么findById
是严重有缺陷的,需要进行修复。使用Optional
的整个意义在于永远不返回null
。 - AndreasObjects.requireNonNull(mapper)
有什么看法?当然,如果没有提供映射函数,你是无法调用map()
的。 - AndreasObjects.requireNonNull()
在源代码中的作用是什么?”因为必须提供映射函数。这个空值检查不是检查对象(存储在Optional
中的value
字段),而是检查映射函数(map
方法的参数)。 - Andreas