Java 未处理的异常在两种不同方法上的工作方式不同
我得到的Java 未处理的异常在两种不同方法上的工作方式不同,java,java-8,Java,Java 8,我得到的未处理异常在两种不同方法上的工作方式不同在第二种方法上getByIds 这毫无意义。 我在第二个方法中调用了第一个方法,并且已经放置了try-catch 对这个例外有什么想法吗?谢谢 @Override public PostPayload getById(@NotNull UUID issueId) throws APIException { try (...) { return test.apply(responseIssue, issueAuxiliaryD
未处理异常在两种不同方法上的工作方式不同
在第二种方法上getByIds
这毫无意义。
我在第二个方法中调用了第一个方法,并且已经放置了try-catch
对这个例外有什么想法吗?谢谢
@Override
public PostPayload getById(@NotNull UUID issueId) throws APIException {
try (...) {
return test.apply(responseIssue, issueAuxiliaryData);
} catch (IOException e) {
logger.error("Event='Unable to retrieve XXX ', issueId={}", issueId, e);
throw new APIException("Unable to retrieve XXX for issueId=" + issueId, e);
}
}
@Override
public List<PostPayload> getByIds(@NotNull Set<UUID> issueIds) throws APIException {
return issueIds.parallelStream()
.map(issueId -> {
try {
return this.getById(issueId, channelId, false);
} catch (IOException | APIException e) {
logger.error("Event='Unable to retrieve XXX ', issueId={}", issueId, e);
throw new APIException("Unable to retrieve XXX for issueId=" + issueId, e);
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
@覆盖
public PostPayload getById(@NotNull UUID issueId)引发异常{
试试(…){
返回测试。应用(响应发布,发布AxiliaryData);
}捕获(IOE异常){
错误(“Event='无法检索XXX',issueId={}”,issueId,e);
抛出新的APIException(“无法为issueId=“+issueId,e”检索XXX);
}
}
@凌驾
公共列表getById(@NotNull Set issueIds)引发异常{
返回issueIds.parallelStream()
.map(发布ID->{
试一试{
返回此.getById(issueId,channelId,false);
}捕获(IOException | APIE异常){
错误(“Event='无法检索XXX',issueId={}”,issueId,e);
抛出新的APIException(“无法为issueId=“+issueId,e”检索XXX);
}
})
.filter(对象::非空)
.collect(Collectors.toList());
}
除了一个例外,您可以做两件事:
抛出APIException
,因此抛出APIException
是一件有效的事情
但是这和你的其他方法有什么不同呢?在这里,您试图从传递给stream().map()
方法的lambda中抛出异常。从文档中,我们可以找到与此lambda对应的功能接口:
public interface Function<T, R> {
R apply(T t);
}
请编辑您的问题,以包含完整的异常消息。您不能在第二个示例中从lambda引发选中的异常可能重复
@Override
public List<PostPayload> getByIds(@NotNull Set<UUID> issueIds) throws APIException {
try {
return issueIds.parallelStream()
.map(issueId -> {
try {
return this.getById(issueId, channelId, false);
} catch (IOException | APIException e) {
logger.error("Event='Unable to retrieve XXX ', issueId={}", issueId, e);
throw new UncheckedApiException("Unable to retrieve XXX for issueId=" + issueId, e);
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
} catch (UncheckedApiException e) {
throw new APIException(e);
}
}