java - 如何将异常从 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 方法。
解决方案
responseExtractor
是匿名类的对象(通过 lambda 表达式创建),后者是ResponseExtractor
接口的子类。
您的类应该覆盖接口的extractData方法ResponseExtractor
。您不能Exception
从此方法中抛出 an,因为extractData
ofResponseExtractor
仅抛出IOException
.
因此,您只能IOException
从 lambda 表达式中抛出或其子类。
您可以参考这篇 codejava.net 文章以获得覆盖的完整概述。