必须使用“orElseThrow”的返回值

问题描述 投票:0回答:2

当我使用声纳 lint 扫描代码时,以下代码将错误显示为“必须使用“orElseThrow”的返回值”

itemList.stream()
    .filter(item -> orderItemId.equals(item.getId()))
    .findAny()
    .orElseThrow(() -> new BadRequestException("12345","Item Not Found"));

这仅用于验证目的,无需从此语句中返回任何内容。需要验证该项目是否存在。

仅供参考:Eclipse 显示了鱿鱼的快速修复:S2201

有人知道如何解决这个错误吗?

java java-8 sonarqube
2个回答
23
投票

我假设这是一个警告(不使用

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");
}

0
投票

这是声纳的限制,有一个开放的票证可以解决此问题(https://community.sonarsource.com/t/fp-java-s2201-optional-orelsethrow-return-value-must-be- used/85204),在问题解决之前最好的办法就是忽略这个规则

© www.soinside.com 2019 - 2024. All rights reserved.