Если вы намереваетесь сообщить об исключении (что является хорошей идеей), вам никогда не следует сопоставлять его с null
.Так как определенные функциональные интерфейсы не позволяют генерировать проверенное исключение, вам следует повторно выбросить его, завернутое в непроверенное исключение:
try {
List<Object> result = list.stream().map(ob-> {
try {
// cannot throw checked exception types
return function(ob);
} catch(Exception e) {
throw new CompletionException(e);
}
}).collect(Collectors.toList());
} catch(CompletionException ex) {
throw (Exception)ex.getCause();
}
Ключевым моментом является то, что это вызовет исходное исключение со всей информацией, содержащейся в нем.вместо создания нового экземпляра через new Exception()
, который бы вообще не содержал информации о причине.
Обратите внимание, что в некоторых случаях уже есть выделенные типы исключений, например UncheckedIOException
для переноса IOException
.В других случаях может быть целесообразнее объявить свой собственный непроверенный тип исключения, чтобы быть уверенным, что он не перепутается с другими исключениями, создаваемыми другими компонентами вашего приложения.