Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未处理的异常在两种不同方法上的工作方式不同_Java_Java 8 - Fatal编程技术网

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