mat*_*att 11 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.List[String] = new java.util.ArrayList[String]()
results
}
}
Run Code Online (Sandbox Code Playgroud)
我从compi得到以下消息
type mismatch;
found : java.util.List[String]
required: scala.collection.immutable.List[String]
results
^
Run Code Online (Sandbox Code Playgroud)
Jat*_*tin 23
将其转换为:
def getStrings() : Seq[String] = {
val results : java.util.List[String] = new java.util.ArrayList[String]()
results
}
Run Code Online (Sandbox Code Playgroud)
这是因为,转换的隐式函数定义为:
implicit def asScalaBuffer[A](l: java.util.List[A]): mutable.Buffer[A]
Run Code Online (Sandbox Code Playgroud)
它返回a mutable.Buffer
而不是scala.collection.immutable.List
.因此错误.所以替代方法是使用a Seq
代替List
或将其转换immutable.List
为如下所示:
def getStrings() : List[String] = {
val results = new java.util.ArrayList[String]()
results.toList
}
Run Code Online (Sandbox Code Playgroud)
pan*_*nnu 13
您需要做的就是导入:
import scala.collection.JavaConversions._
Run Code Online (Sandbox Code Playgroud)