繁体   English   中英

Scala的隐式转换不适用于java.util.List

[英]Scala's implicit conversion isn't working on java.util.List

我是一个新的scala,并且我正在尝试在我的java项目中使用scala。 我想在scala代码中将java.util.ListArray一样对待,并且我知道隐式转换有点复杂,并且认为这可能对我有帮助。 但是在将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必须链接两次隐式转换(一个juArrayListscala.Array ,另一个从scala.ArrayArrayOps 。通常,这种技术将带来指数级的检查可能性(遍历所有可能的链隐式转换),这会使开发人员从字面上说不出哪一种有效,因此,Scala仅检查1种可能的转换,并且由于ArrayListArray都没有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM