首页 > 解决方案 > 如何将异常从 lambda 抛出到调用方法?

问题描述

我有我的方法的简化示例:

private void bulkIndex(String filePath, RestTemplate restTemplate) throws Exception  {
    RequestCallback requestCallback = request -> request
            .getHeaders()

    ResponseExtractor<Void> responseExtractor = response -> {

        try {
            indexData(filePath);
        } catch (Exception e) {
            throw e; //I want to throw this to the caller of the BulkIndex method
        }
        return null;
    };
    restTemplate.execute(uri, HttpMethod.GET, requestCallback, responseExtractor) ;
}

在其当前状态下,代码将简单地在“Throw e”行突出显示错误并显示一条消息:Unhandled exception type Exception

我试图将异常一直链接到调用堆栈,但我不知道如何绕过这个 lambda 方法。

标签: java

解决方案


responseExtractor是匿名类的对象(通过 lambda 表达式创建),后者是ResponseExtractor接口的子类。

您的类应该覆盖接口的extractData方法ResponseExtractor。您不能Exception从此方法中抛出 an,因为extractDataofResponseExtractor仅抛出IOException.

因此,您只能IOException从 lambda 表达式中抛出或其子类。

您可以参考这篇 codejava.net 文章以获得覆盖的完整概述。


推荐阅读