arn*_*nab 27 scala type-conversion scala-2.8 scala-java-interop scala-collections
我在Scala中有一个Set(我可以选择任何实现,因为我正在创建Set.我正在使用的Java库需要一个java.util.Set [String].
以下是在Scala中执行此操作的正确方法(使用scala.collection.jcl.HashSet#underlyinges):
import com.javalibrary.Animals
var classes = new scala.collection.jcl.HashSet[String]
classes += "Amphibian"
classes += "Reptile"
Animals.find(classes.underlying)
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但由于我是Scala的新手,我想知道这是否是首选方式(我尝试的任何其他方式都会出现类型不匹配错误):
error: type mismatch;
found : scala.collection.jcl.HashSet[String]
required: java.util.Set[_]
Run Code Online (Sandbox Code Playgroud)
Ran*_*ulz 23
如果您询问Scala 2.8,则Java集合的互操作性由scala.collection.JavaConversions.提供.在这种情况下,您需要JavaConversions.asSet(...)(每个方向都有一个,Java - > Scala和Scala - > Java).
对于Scala 2.7,包装Java集合的每个scala.collection.jcl类都有一个underlying属性,该属性提供包装的Java集合实例.
由于Scala 2.12.0 scala.collection.JavaConversions 已弃用:
因此,不推荐使用此API,而应使用JavaConverters.JavaConverters提供相同的转换,但是通过扩展方法.
而且,由于斯卡拉2.8.1,你可以使用 scala.collection.JavaConverters这个目的:
import scala.collection.JavaConverters._
val javaSet = new java.util.HashSet[String]()
val scalaSet = javaSet.asScala
val javaSetAgain = scalaSet.asJava
Run Code Online (Sandbox Code Playgroud)
请注意,开始时Scala 2.13, packagescala.jdk.CollectionConverters会替换已弃用的包scala.collection.JavaConverters/JavaConversions._:
import scala.jdk.CollectionConverters._
// val scalaSet: Set[String] = Set("a", "b")
val javaSet = scalaSet.asJava
// javaSet: java.util.Set[String] = [a, b]
javaSet.asScala
// scala.collection.mutable.Set[String] = Set(a, b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11274 次 |
| 最近记录: |