Создайте java.util.List из java.util.Set в Scala

Я хотел бы создать список java на основе другой коллекции java, например. Установить на Скале.

Почему это невозможно? Я получаю требуемую ошибку: scala.this.Int.

val in: java.util.Set[String] = new java.util.HashSet()
val out : java.util.List[String] = new java.util.ArrayList(in)

Однако это сработало, но не кажется правильным:

val in: java.util.Set[String] = new java.util.HashSet()
val out: List[String] = new java.util.ArrayList()

out.addAll(in.asInstanceOf[java.util.Set[String]])

Спасибо!


person hammarback    schedule 02.07.2009    source источник
comment
Спасибо за ответы! Я заметил, что если тип набора не указан (обобщения не используются), это тоже работает: val out: List[String] = new ArrayList[String](int.asInstanceOf[Set[String]])   -  person hammarback    schedule 02.07.2009
comment
Спасибо за вопрос - пытаясь ответить на него, я многое узнал о Scala. Кстати, если кто-то ответит вам, вежливо проголосовать или принять его ответ. (Я не ответил, но был благодарен тем, кто ответил)   -  person Nick Fortescue    schedule 02.07.2009
comment
Зарегистрировано в trac lampsvn.epfl.ch/trac/scala/ticket/2119   -  person James Iry    schedule 03.07.2009
comment
Спасибо за подсказку Ник! Я здесь впервые :-)   -  person hammarback    schedule 03.07.2009


Ответы (2)


Вам нужно будет явно передать переменную типа ArrayList.

Это отлично работает:

val in = new java.util.HashSet[String]
val out = new java.util.ArrayList[String](in)
person Tony Morris    schedule 02.07.2009

Это работает:

val in: java.util.Set[String] = new java.util.HashSet()
val out : java.util.List[String] = new java.util.ArrayList[String](in)

Я предполагаю, что проблема каким-то образом связана со стиранием типов, поскольку ArrayList не параметризован, как массив Scala, а скорее является экзистенциальным типом. Вероятно, это делает вывод типа невозможным.

person Daniel C. Sobral    schedule 02.07.2009