Неявное преобразование java.util.List в scala List не происходит
У меня есть основная проблема с scala.collection.JavaConversions. Я бы ожидал, что следующий код будет работать, но неявное преобразование из java.util.List [String] в scala List [String] не произойдет. Почему?
import collection.JavaConversions._
import java.util
class Test {
def getStrings() : List[String] = {
val results : java.util.List[String] = new java.util.ArrayList[String]()
results
}
}
Я получаю следующее сообщение от compi
type mismatch;
found : java.util.List[String]
required: scala.collection.immutable.List[String]
results
^
Ответы
Ответ 1
Преобразуйте его в:
def getStrings() : Seq[String] = {
val results : java.util.List[String] = new java.util.ArrayList[String]()
results
}
Это потому, что неявная функция для преобразования определяется как:
implicit def asScalaBuffer[A](l: java.util.List[A]): mutable.Buffer[A]
Он возвращает mutable.Buffer
, а не scala.collection.immutable.List
. Отсюда и ошибка. Поэтому альтернативой является использование Seq
вместо List
или конвертировать его в immutable.List
, как показано ниже:
def getStrings() : List[String] = {
val results = new java.util.ArrayList[String]()
results.toList
}
Ответ 2
Все, что вам нужно сделать, это импортировать это:
import scala.collection.JavaConversions._