Библиотеки Scala подразделяются на две основные категории:
- Оригинальные библиотеки Scala. Они полностью (или почти полностью) написаны на Scala. Обычно люди будут писать библиотеки с нуля по уважительным причинам. Возможно, в Java нет подобной библиотеки, или, возможно, тот, кто написал Scala, считает, что эквивалент Java имеет серьезные ограничения.
Коллекции - один из таких примеров.
- Scala Wrappers над библиотеками Java. В этих случаях Scala использует шаблон адаптера (или один из других аналогичных шаблонов) для обеспечения Scala-friendly API. Эти API более гибки, хорошо интегрируются с важными классами Scala (такими как коллекции и
Option
) и часто используют мощные функции Scala, такие как черты, для уменьшения шаблонов.
Эти библиотеки редко предлагают больше функциональности, чем Java, но значительно сокращают шаблон и делают код, использующий их, более идиоматичным. Однако часто они представляют собой лишь часть общего набора функций, предоставляемых Java. В зависимости от библиотеки, это может быть, а может и не быть возможным или простым расширением ее путем доступа к базовым классам Java.
Отличным примером этого является Scala Swing.
В конкретном случае scala.io
это не столько библиотека, сколько грубая обертка, просто для выполнения простых общих задач сценариев с идиоматическим Scala API. Это достаточно для этого - и, конечно, намного добрее на моих глазах, чем java.io
, - но не для каких-либо серьезных операций ввода-вывода. Существует реальная библиотека ввода / вывода для Scala, которая в настоящее время проходит оценку для принятия.
Еще один пример, который мне очень нравится, если scala.sys.process
. Он охватывает Java Process
и ProcessBuilder
, предоставляя почти все функциональные возможности и добавляя некоторые. Кроме того, при необходимости вы можете использовать большинство внутренних компонентов Java (единственное исключение составляет Process
, что не очень полезно).
Я советую использовать библиотеки Scala, если они существуют и соответствуют вашим потребностям, расширять их, если они в основном адекватны, но в противном случае обращаться к библиотекам Java без колебаний. В конце концов, высокая степень взаимодействия с Java является ключевой особенностью Scala.