Кроме классического подхода для обработки ошибок с помощью исключений, можно выделить также функциональный подход.
Вместо того, чтобы кидать исключение сразу, можно его локализировать, а потом выполнить над ним определеные действия.
Например, в языке Scala для этого используется определенный класс Try.
def inputStreamForURL(url: String): Try[Try[Try[InputStream]]] = parseURL(url).map { u =>
Try(u.openConnection()).map(conn => Try(conn.getInputStream))
}
В Java мире с помощью библиотеки Vavr также можно обрабатывать ошибки в функциональном стиле.
Читать полностью »