27

私はScalaにセットを持っています(セットを作成するときに任意の実装を選択できます。使用しているJavaライブラリはjava.util.Set[String]を想定しています。

Scalaでこれを行う正しい方法は次のとおりです(scala.collection.jcl.HashSet#underlyingを使用):

import com.javalibrary.Animals

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

それは機能しているようですが、私はScalaに非常に慣れていないので、これが好ましい方法であるかどうかを知りたいです(他の方法で試してみると、型の不一致エラーが発生します):

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

5 に答える 5

24

Scala 2.8 について質問している場合、Java コレクションの相互運用性は によって提供されscala.collection.JavaConversionsます。この場合、JavaConversions.asSet(...) が必要です (Java -> Scala と Scala -> Java の各方向に 1 つずつあります)。

Scala 2.7 の場合、Java コレクションをラップする各 scala.collection.jcl クラスにunderlyingは、ラップされた Java コレクション インスタンスを提供するプロパティがあります。

于 2010-02-10T02:27:13.830 に答える
5

2.7.xの場合、次を使用することを強くお勧めします:http: //github.com/jorgeortiz85/scala-javautils

于 2010-02-10T10:18:18.593 に答える
2

Scala 2.13packageを開始すると、scala.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)
于 2019-03-29T21:14:57.473 に答える