25

J'ai un Set dans Scala (Je peux choisir n'importe quelle implémentation lors de la création du Set.) La bibliothèque Java que j'utilise attend un java.util.Set [String]Convertir Scala Set en Java (java.util.Set)?

faire à Scala (en utilisant # scala.collection.jcl.HashSet de sous-jacents):

import com.javalibrary.Animals 

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

Il semble fonctionner, mais depuis que je suis très nouveau à Scala je veux savoir si c'est le meilleur moyen (tout d'une autre manière, j'essaie que je reçois une erreur de type-incompatibilité):

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

Répondre

23

Si vous posez des questions sur Scala 2.8, l'interopérabilité des collections Java est fournie par scala.collection.JavaConversions. Dans ce cas, vous voulez JavaConversions.asSet (...) (il y en a un pour chaque direction, Java -> Scala et Scala -> Java).

Pour Scala 2.7, chaque classe scala.collection.jcl qui enveloppe une collection Java a une propriété underlying qui fournit l'instance de collection Java enveloppée.

+0

C'est bon de savoir! J'étais à Scala 2.7. – arnab

7

Depuis Scala 2.12.0 scala.collection.JavaConversionsis deprecated:

Par conséquent, cette API a été désapprouvée et JavaConverters doit être utilisé à la place. JavaConverters fournit les mêmes conversions, mais via des méthodes d'extension.

Et depuis Scala 2.8.1 vous pouvez usescala.collection.JavaConverters à cet effet:

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

Dans Scala 2,12, il est possible d'utiliser: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

Questions connexes