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)