Чтобы ваш пример работал, Scala пришлось бы связать 2 неявных преобразования (одно от j.u.ArrayList
до scala.Array
, другое от scala.Array
до ArrayOps
. В общем, такая техника принесла бы экспоненциальное количество возможностей для проверки (пересекает все возможные цепочки неявных преобразований) и делает разработчиков буквально неспособными определить, какое из них работает. Таким образом, Scala проверяет только 1 возможное преобразование, и, поскольку в * 1008 нет ни map
, ни * ни в Array
, не получается.
Отвечая на ваши вопросы, вы должны использовать JavaConverters
:
scala> val l = new ArrayList[String]()
l: java.util.ArrayList[String] = []
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> l.asScala
res0: scala.collection.mutable.Buffer[String] = Buffer()
scala> l.asScala.toArray
res1: Array[String] = Array()
scala> l.asScala.toArray.map(x => x + "1")
res2: Array[String] = Array()