Потоки и связанные классы не предназначены для использования проверенных исключений. Но любой RuntimeException
может быть сгенерирован в любой точке кода, поэтому хитрость заключается в том, чтобы генерировать среду выполнения, причиной которой (цепочка исключений) является соответствующее проверенное исключение:
private void fooMethod(List<String> list) throws Exception {
list.forEach(element->{
if(element.equals("a")) {
throw new Runtime(new Exception("error!"));
}
});
}
Затем в перехватывающем коде вы просто должны получить оригинальное проверенное исключение, инкапсулированное:
try {
fooMethod(someList);
} catch(Throwable e) {
Exception ex = e.getCause();
}