Скажем, я использую библиотеку Java из моего проекта Scala. Эта библиотека Java генерирует исключения по всему месту, но я не чувствую себя комфортно, просто позволяя им распространяться "в мире Scala", поскольку нет способа убедиться, какие исключения может использовать метод Scala (за исключением документирования их). Так что это код, который я обычно пишу:
def doesNotThrowExceptions(parameter: String): Either[Throwable, T] =
catching(classOf[IOException], classOf[NoSuchAlgorithmException]) either {
// Code calling the Java library
// Code generating a value of type T
}
Затем, как правило, я буду использовать Either.RightProjection.flatMap для цепных методов, возвращающих Either[Throwable, ...] или Either.RightProjection.map, чтобы смешивать методы, возвращающие Either[Throwable, ...] и другие методы. Или просто Either.fold сделать что-то со значением Throwable. Так или иначе, это все еще не кажется абсолютно правильным.
Это самый "идиоматический" способ справиться с исключениями Java в Scala? Разве нет лучшего способа?