Scala: лучший способ обработки исключений из библиотеки Java?

Допустим, я использую библиотеку 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? Нет лучшего способа?

23
задан giampaolo 18 December 2015 в 15:20
поделиться