我对 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
^
最佳答案
将其转换为:
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
}
关于java - 不会发生 java.util.List 到 scala List 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18054838/