11

我对 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
    ^
4

2 回答 2

24

将其转换为:

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] 

它返回 amutable.Buffer而不是scala.collection.immutable.List。因此错误。因此,替代方法是使用 aSeq代替List或将其转换为 a immutable.List,如下所示:

def getStrings() : List[String] = {
    val results = new java.util.ArrayList[String]()     
    results.toList
}
于 2013-08-05T10:29:56.217 回答
13

您需要做的就是导入这个:

import scala.collection.JavaConversions._
于 2015-03-11T16:37:32.237 回答