Допустим, я использую библиотеку 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
для объединения методов, возвращающих Либо [Throwable, ...]
, либо Either.RightProjection.map
, чтобы смешивать методы, возвращающие Either [Throwable, ... ]
и другие методы. Или просто Either.fold
, чтобы что-то сделать со значением Throwable
. Тем не менее, почему-то это все еще не кажется полностью правильным .
Является ли это наиболее «идиоматическим» способом работы с исключениями Java в Scala? Нет лучшего способа?