![](/img/trans.png)
[英]Implicit conversion of java.util.List to scala List does not occur
[英]Scala's implicit conversion isn't working on java.util.List
我是一个新的scala,并且我正在尝试在我的java项目中使用scala。 我想在scala代码中将java.util.List
像Array
一样对待,并且我知道隐式转换有点复杂,并且认为这可能对我有帮助。 但是在将java.util.ArrayList[String]
转换为Array[String]
进行隐式转换之后,就定义了。 我的代码仍然无法正常工作。 这是我的代码,任何人都可以给我一些建议。
implicit def collection2Arr(collection:java.util.ArrayList[String]) :Array[String] = {
return collection.toArray(new Array[String](collection.size()))
}
val arrayList = new util.ArrayList[String]()
arrayList.map(x=>x+"1")
为了使您的示例正常工作,Scala必须链接两次隐式转换(一个juArrayList
到scala.Array
,另一个从scala.Array
到ArrayOps
。通常,这种技术将带来指数级的检查可能性(遍历所有可能的链隐式转换),这会使开发人员从字面上说不出哪一种有效,因此,Scala仅检查1种可能的转换,并且由于ArrayList
和Array
都没有map
,因此失败。
回答您的问题,您应该使用JavaConverters
:
scala> val l = new ArrayList[String]()
l: java.util.ArrayList[String] = []
scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
scala> l.asScala
res0: scala.collection.mutable.Buffer[String] = Buffer()
scala> l.asScala.toArray
res1: Array[String] = Array()
scala> l.asScala.toArray.map(x => x + "1")
res2: Array[String] = Array()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.