簡體   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