我正在尝试在lambda内引发异常,但它一直给我一个错误,指出未处理的IOException。
private <T> T getResponse(final RestURI query, final Class<T> responseClass) throws IOException {
return getValue(query,
reader -> {
try {
return mapper.readValue(reader, responseClass);
} catch (IOException e) {
throw new IOException("Exception while deserializing the output " + e.getMessage());
}
});
}
有人可以告诉我我在做什么错吗?
答案 0 :(得分:2)
您在getValue()
中使用的功能接口未在此签名中指定IOException
检查的异常。
因此,您不能将其抛出,因为只有声明的已检查异常可能会在lambda体内抛出。
创建并使用自己的声明IOException
的功能接口,或者从lambda抛出任何有效的RuntimeException
实例。
例如MC Emperor建议的UncheckedIOException
。
此外,您还应通过将新异常链接到原因异常上来引发新异常,以将信息保留在stracktrace中:
try {
return mapper.readValue(reader, responseClass);
} catch (IOException e) {
throw new UncheckedIOException("Exception while deserializing the output ", e);
}