2009-07-02 4 views
4

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

Почему это невозможно? Я получаю требуемую ошибку: 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]]) 

Спасибо!

+0

Спасибо за ответы! я заметил, что если тип Сета был неопределенным (не Дженерик не используются), это тоже работает: вала из: Список [String] = новый ArrayList [String] (int.asInstanceOf [Set [String]]) – hammarback

+0

Спасибо за вопрос - пытаясь ответить на него, я много узнал о Scala. Кстати, если кто-то вам ответит, то вежливо поддержать или принять их ответ. (Я не ответил, но я был благодарен тем, кто это сделал) –

+0

Подано в trac https://lampsvn.epfl.ch/trac/scala/ticket/2119 –

ответ

2

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

Это прекрасно работает:

val in = new java.util.HashSet[String] 
val out = new java.util.ArrayList[String](in) 
2

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

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

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