如何使用 Optional<T> 等使 return 类型可为空?
How to make return type nullable using Optional<T> etc?
我有以下方法 returns DemoDTO
如果找不到,return 异常。
public DemoDTO findShallowByUuid(UUID uuid) {
return demoRepository.findShallowByUuid(uuid)
.orElseThrow(() -> new EntityNotFoundException("Not found"));
}
但是,我想让方法 return 可以为 null DemoDTO
而不是抛出错误。为此,我将其类型和相关的 return 类型转换为 Optional<DemoDTO>
或 Optional<T>
,但它导致了一些与相关 DTO 有关的问题。在我将构造函数参数更新为 Optional<T>
后,使用此 DTO 的应用程序的另一部分抱怨。
我不确定转换为 Optional<T>
是不是一个好主意。如果这是个好主意,我是否应该向 DemoDTO
添加另一个构造函数?我不确定这是否是一个好的解决方案,因为它还需要对 属性 类型进行一些更改。有什么想法吗?
为了将我的评论变成答案,根据您的要求,这将是最优雅的方式:
public DemoDTO findShallowByUuid(UUID uuid) {
return demoRepository.findShallowByUuid(uuid).orElse(null);
}
但要确保调用代码正确处理 null
以避免 NullPointerException
s.
我有以下方法 returns DemoDTO
如果找不到,return 异常。
public DemoDTO findShallowByUuid(UUID uuid) {
return demoRepository.findShallowByUuid(uuid)
.orElseThrow(() -> new EntityNotFoundException("Not found"));
}
但是,我想让方法 return 可以为 null DemoDTO
而不是抛出错误。为此,我将其类型和相关的 return 类型转换为 Optional<DemoDTO>
或 Optional<T>
,但它导致了一些与相关 DTO 有关的问题。在我将构造函数参数更新为 Optional<T>
后,使用此 DTO 的应用程序的另一部分抱怨。
我不确定转换为 Optional<T>
是不是一个好主意。如果这是个好主意,我是否应该向 DemoDTO
添加另一个构造函数?我不确定这是否是一个好的解决方案,因为它还需要对 属性 类型进行一些更改。有什么想法吗?
为了将我的评论变成答案,根据您的要求,这将是最优雅的方式:
public DemoDTO findShallowByUuid(UUID uuid) {
return demoRepository.findShallowByUuid(uuid).orElse(null);
}
但要确保调用代码正确处理 null
以避免 NullPointerException
s.