【问题标题】:Implicit conversion of java.util.List to scala List does not occur不会发生 java.util.List 到 scala List 的隐式转换
【发布时间】:2013-08-05 23:08:02
【问题描述】:

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

【问题讨论】:

    标签: java scala implicit-conversion scala-java-interop


    【解决方案1】:

    将其转换为:

    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.util.List[String]
    • @AlexeyRomanov 仅用于说明转换位置。
    【解决方案2】:

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

    import scala.collection.JavaConversions._
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多