2011-07-07 50 views
2

我的Java API它返回此类型:自动转换2.8

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

Scala中的程序,我需要发送上述类型的参数Scala的函数 '酒吧',其类型为

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

} 

所以我打电话吧,如:

val list = bar(Foo.someJavaMethod()) 

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

我想有这样的进口

import scala.collection.JavaConversions._ 

会做Java和Scala集合之间的隐含自动转换。

我也使用像尝试:

Foo.someJavaMethod().toList 

但这并不工作。

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

回答

7

首先,ArrayList不会转换为List,它会转换为斯卡拉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))