我对
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 }