Неявное преобразование java.util.List в scala List не происходит - программирование
Подтвердить что ты не робот

Неявное преобразование 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
    ^
4b9b3361

Ответ 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._