Неявное преобразование Scala не работает на java.util.List - PullRequest
0 голосов
/ 24 августа 2018

Я новичок в Scala, и я пытаюсь использовать Scala в своем проекте Java.Я хочу относиться к java.util.List как Array в коде Scala, и я знаю немного неявного преобразования и думаю, что это может помочь мне.Но после неявного преобразования преобразование java.util.ArrayList[String] в Array[String] определено.Мой код все еще не работает.Вот мой код, может кто-нибудь дать мне несколько советов.

    implicit def collection2Arr(collection:java.util.ArrayList[String]) :Array[String] = {
            return collection.toArray(new Array[String](collection.size()))
    }

    val arrayList = new util.ArrayList[String]()
    arrayList.map(x=>x+"1")

1 Ответ

0 голосов
/ 24 августа 2018

Чтобы ваш пример работал, 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...