25

У меня есть Set в Scala (я могу выбрать любую реализацию, поскольку я создаю Set. Я использую библиотеку Java, которая ожидает java.util.Set [String].Преобразование Scala в Java (java.util.Set)?

Правильно ли это путь: сделать это в Scala (с использованием scala.collection.jcl.HashSet #, лежащие в основе):

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[_] 

ответ

23

Если вы спрашивали о Scala 2.8, совместимость с коллекциями Java предоставляется scala.collection.JavaConversions. В этом случае вы хотите JavaConversions.asSet (...) (есть один для каждого направления, Java -> Scala и Scala -> Java).

Для Scala 2.7 каждый класс scala.collection.jcl, который обертывает коллекцию Java, имеет свойство underlying, которое предоставляет экземпляр коллекции Java.

+0

Это хорошо знать! Я был в Scala 2.7. – arnab

7

Поскольку Scala 2.12.0 scala.collection.JavaConversionsis deprecated:

Поэтому этот API устарел и JavaConverters следует использовать вместо этого. JavaConverters предоставляет одни и те же преобразования, но с помощью методов расширения.

А так как Scala 2.8.1 вы можете usescala.collection.JavaConverters для этой цели:

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

В Scala 2.12 можно использовать: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

Смежные вопросы