当我使用声纳 lint 扫描代码时,以下代码将错误显示为“必须使用“orElseThrow”的返回值”
itemList.stream()
.filter(item -> orderItemId.equals(item.getId()))
.findAny()
.orElseThrow(() -> new BadRequestException("12345","Item Not Found"));
这仅用于验证目的,无需从此语句中返回任何内容。需要验证该项目是否存在。
仅供参考:Eclipse 显示了鱿鱼的快速修复:S2201
有人知道如何解决这个错误吗?
我假设这是一个警告(不使用
orElseThrow()
返回的值不应是错误)。
如果您想消除该警告,请使用
isPresent()
代替:
if (!itemList.stream().filter(i->orderItemId.equals(i.getId())).findAny().isPresent()) {
throw new BadRequestException("12345","Item Not Found");
}
或者避免使用
Optional
,而使用 anyMatch()
代替:
if (!itemList.stream().anyMatch(i->orderItemId.equals(i.getId()))) {
throw new BadRequestException("12345","Item Not Found");
}
这是声纳的限制,有一个开放的票证可以解决此问题(https://community.sonarsource.com/t/fp-java-s2201-optional-orelsethrow-return-value-must-be- used/85204),在问题解决之前最好的办法就是忽略这个规则