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

标签 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
  }
}

我从 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/

相关文章:

java - char数组的递归数组搜索

java - 在sqlite数据库中多次插入相同的数据

c - 为什么在为二维数组分配指针时需要指定行?

swift - 在 Swift 中是否可以为你的类类型创建隐式转换?

c++ - 在 GCC 中避免或警告从 const char* 到 bool 的隐式转换

java - 如何从资源中获取文件?

java - 分块字段的默认值 - (setChunked)

scala - 使用 guice 注入(inject)游戏中某个特征/类的所有实现

scala - 如何关闭枚举文件?

ruby-on-rails - 关于 Rails 前端和 Scala 后端之间通信的建议