不会发生java.util.List到scala List的隐式转换
我对scala.collection.JavaConversions有一个非常基本的问题。我希望下面的代码可以工作,但是从java.util.List[String]到scala List[String]的隐式转换不会发生。为什么?不会发生java.util.List到scala List的隐式转换,java,scala,implicit-conversion,scala-java-interop,Java,Scala,Implicit Conversion,Scala Java Interop,我对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.L
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
^
将其转换为:
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
或将其转换为不可变。如下所示:
def getStrings() : List[String] = {
val results = new java.util.ArrayList[String]()
results.toList
}
您只需导入以下内容:
import scala.collection.JavaConversions._
在第一种情况下,您不需要:java.util.List[String]
。@AlexeyRomanov显示它只是为了解释转换的位置。