Конвертировать java.util.Set в scala.collection.Set - PullRequest
23 голосов
/ 26 мая 2011

Как я могу преобразовать 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 : _*)

Что я делаю не так?

Ответы [ 2 ]

20 голосов
/ 26 мая 2011

Использовать JavaConverters вместо

import scala.collection.JavaConverters._

val out = in.asScala

out: scala.collection.mutable.Set[String] = Set(Hugo, Oscar)
15 голосов
/ 26 мая 2011

toArray(), вызванный на Java Set, вернет массив Object.Поскольку вы уже импортировали JavaConversions, asScalaSet неявно преобразует ваш набор Java в изменяемый набор Scala или использует toSet для преобразования его в неизменяемый набор.

См. Также Преобразование набора Scala вJava (java.util.Set)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...