25

我在Scala中有一個Set(我可以選擇任何實現,因爲我正在創建Set。我使用的Java庫期望java.util.Set [String]。將Scala轉換爲Java(java.util.Set)?

以下是正確的方法爲此在斯卡拉(使用scala.collection.jcl.HashSet#底層):

import com.javalibrary.Animals 

var classes = new scala.collection.jcl.HashSet[String] 
classes += "Amphibian" 
classes += "Reptile" 
Animals.find(classes.underlying) 

這似乎是工作,但因爲我是很新的斯卡拉我想知道這是否是首選的方式(任何其他方式我嘗試我得到一個類型不匹配的錯誤):

error: type mismatch; 
found : scala.collection.jcl.HashSet[String] 
required: java.util.Set[_] 

回答

23

如果您在問Scala 2.8,Java集合的互操作性由scala.collection.JavaConversions提供。在這種情況下,您需要JavaConversions.asSet(...)(每個方向都有一個,Java - > Scala和Scala - > Java)。

對於Scala 2.7,每個包裝Java集合的scala.collection.jcl類都有一個underlying屬性,該屬性提供了打包的Java集合實例。

+0

這是一個好知道!我在斯卡拉2.7。 – arnab 2010-02-11 01:58:51

7

由於斯卡拉2.12.0 scala.collection.JavaConversionsis deprecated

因此,這個API已被棄用,JavaConverters應改爲使用。 JavaConverters提供相同的轉換,但通過擴展方法。

而且由於斯卡拉2.8.1可以usescala.collection.JavaConverters爲了這個目的:

import scala.collection.JavaConverters._ 
val javaSet = new java.util.HashSet[String]() 
val scalaSet = javaSet.asScala 
val javaSetAgain = scalaSet.asJava 
0

在斯卡拉2.12,可以使用:scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)