Frage

Ich habe ein Set in Scala (I jede Implementierung können wählen, wie ich das Set erschaffe. Die Java-Bibliothek verwende ich erwartet ein java.util.Set [Zeichenfolge].

Ist der Anschluss an den richtigen Weg, dies in Scala zu tun (mit 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)

Es scheint zu funktionieren, aber da ich bin sehr neu zu Scala Ich möchte wissen, ob dies der bevorzugte Weg ist (jede andere Art und Weise versuche ich, erhalte ich einen Typ-Mismatch-Fehler):

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

Lösung

Wenn Sie Scala gefragt wurden 2.8, Java Sammlungen Interoperabilität wird von scala.collection.JavaConversions geliefert. In diesem Fall möchten Sie JavaConversions.asSet (...) (es gibt eine für jede Richtung, Java -> Scala und Scala -> Java).

Für Scala 2.7, jede scala.collection.jcl Klasse, die eine Java-Sammlung wickelt hat eine underlying Eigenschaft, die die verpackte Java Sammlung Instanz bereitstellt.

Andere Tipps

Da Scala 2.12.0 scala.collection.JavaConversions ist veraltet :

  

Daher ist diese API ist veraltet und JavaConverters sollte stattdessen verwendet werden. JavaConverters bietet die gleichen Umwandlungen, sondern durch Erweiterungsmethoden.

Und da Scala 2.8.1 können Sie Verwendung scala.collection.JavaConverters für diesen Zweck:

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

Für 2.7.x I sehr empfehlen die Verwendung von: http: // Github .com / jorgeortiz85 / scala-javautils

In Scala 2.12 ist es möglich, zu verwenden: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

Beachten Sie, dass Start-Scala 2.13, Paket

scroll top