Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不会发生java.util.List到scala List的隐式转换_Java_Scala_Implicit Conversion_Scala Java Interop - Fatal编程技术网

不会发生java.util.List到scala List的隐式转换

不会发生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

我对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
或将其转换为
不可变。如下所示:

def getStrings() : List[String] = {
    val results = new java.util.ArrayList[String]()     
    results.toList
}

您只需导入以下内容:

import scala.collection.JavaConversions._

在第一种情况下,您不需要
:java.util.List[String]
。@AlexeyRomanov显示它只是为了解释转换的位置。