在 scala 2.8 中使用 scala.collection.JavaConversions._ 时,scala 和 java 集合之间的自动转换
我有返回此类型的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
但这也不起作用。
这个问题的解决办法是什么?
I have java API which return this type:
ArrayList[ArrayList[String]] = Foo.someJavaMethod()
In scala program, I need to send above type as a parameter to a scala function 'bar' whose type is
def bar(param: List[List[String]]) : List[String] = {
}
so I call bar like:
val list = bar(Foo.someJavaMethod())
but this does not work as I get compile error.
I thought have this import
import scala.collection.JavaConversions._
will do implicit automatic conversion between Java and Scala collections.
I also tried using like:
Foo.someJavaMethod().toList
but that does not work either.
What is the solution to this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,
ArrayList
不会转换为List
,而是转换为 ScalaBuffer
。其次,隐式转换不会递归到集合的元素中。您必须手动映射内部列表。要么使用隐式转换:
或者,更明确地,如果您愿意:
First,
ArrayList
does not convert toList
, it converts to a ScalaBuffer
. Second, implicit conversion will not recurse into the elements of your collections.You'll have to manually map the inner lists. Either with implicit conversions:
Or, more explicitly, if you prefer: