![](/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.