2011-07-07 48 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))