25

Ho una serie a Scala (posso scegliere qualsiasi applicazione come sto creando il Set. La libreria Java che sto usando è in attesa di un java.util.Set [String].Convert Scala impostato in Java (java.util.Set)?

è la seguente il modo corretto per farlo in Scala (utilizzando scala.collection.jcl.HashSet # sottostanti):

import com.javalibrary.Animals 

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

E sembra funzionare, ma dato che sono molto nuovo a Scala voglio sapere se questo è il modo preferito (eventuali In alternativa, provo un errore di mancata corrispondenza di tipo):

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

risposta

23

Se stavi chiedendo di Scala 2.8, l'interoperabilità delle raccolte Java è fornita da scala.collection.JavaConversions. In questo caso, vuoi JavaConversions.asSet (...) (ce n'è uno per ogni direzione, Java -> Scala e Scala -> Java).

Per Scala 2.7, ogni classe scala.collection.jcl che include una raccolta Java ha una proprietà underlying che fornisce l'istanza della raccolta Java spostata.

+0

Questo è bene sapere! Ero in Scala 2.7. – arnab

7

Da Scala 2.12.0 scala.collection.JavaConversionsis deprecated:

Pertanto, questa API è obsoleto ed JavaConverters dovrebbe essere usato al posto. JavaConverters fornisce le stesse conversioni, ma attraverso i metodi di estensione.

E poiché Scala 2.8.1 è possibile usescala.collection.JavaConverters per questo scopo:

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

In Scala 2.12 è possibile utilizzare: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)