【问题标题】:Auto conversion between scala and java collections when using scala.collection.JavaConversions._ in scala 2.8在 scala 2.8 中使用 scala.collection.JavaConversions._ 时 scala 和 java 集合之间的自动转换
【发布时间】:2011-09-30 09:27:37
【问题描述】:

我有返回这种类型的 java API:

ArrayList[ArrayList[String]] = Foo.someJavaMethod()   

在 scala 程序中,我需要将上述类型作为参数发送到类型为 scala 函数“bar”

def bar(param: List[List[String]]) : List[String] = {

}

所以我把 bar 称为:

val list = bar(Foo.someJavaMethod())

但这不起作用,因为我得到编译错误。

我以为有这个导入

import scala.collection.JavaConversions._ 

将在 Java 和 Scala 集合之间进行隐式自动转换。

我也尝试过使用like:

Foo.someJavaMethod().toList 

但这也不起作用。

这个问题的解决方法是什么?

【问题讨论】:

    标签: scala scala-collections scala-java-interop


    【解决方案1】:

    首先,ArrayList 不会转换为 List,它会转换为 Scala Buffer。其次,隐式转换不会递归到集合的元素中。

    您必须手动映射内部列表。无论是隐式转换:

    import collection.JavaConversions._
    val f = Foo.someJavaMethod()
    bar(f.toList.map(_.toList))
    

    或者,更明确地说,如果您愿意:

    import collection.JavaConverters._
    val f = Foo.someJavaMethod()
    bar(f.asScala.toList.map(_.asScala.toList))
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 1970-01-01
      • 2012-07-25
      • 2010-10-15
      • 2011-06-08
      • 2011-04-12
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多