Преобразовать java.util.Set в scala.collection.Set
Как преобразовать java.util.Set [String] в scala.collection.Set с общим типом в Scala 2.8.1?
import scala.collection.JavaConversions._
var in : java.util.Set[String] = new java.util.HashSet[String]()
in.add("Oscar")
in.add("Hugo")
val out : scala.collection.immutable.Set[String] = Set(in.toArray : _*)
И это сообщение об ошибке
<console>:9: error: type mismatch;
found : Array[java.lang.Object]
required: Array[_ <: String]
val out : scala.collection.immutable.Set[String] = Set(javaset.toArray : _*)
Что я делаю неправильно?
Ответы
Ответ 1
toArray()
, вызванный java Set
, вернет массив Object
. Поскольку вы уже импортировали JavaConversions
, asScalaSet
будет неявно преобразовывать ваш набор Java в изменяемый набор Scala или использовать toSet
для преобразования его в неизменяемый набор.
См. также Преобразовать Scala Установить в Java (java.util.Set)
Ответ 2
Используйте JavaConverters вместо
import scala.collection.JavaConverters._
val out = in.asScala
out: scala.collection.mutable.Set[String] = Set(Hugo, Oscar)