2009-07-02 11 views
4

Je voudrais créer une liste java basée sur une autre collection Java par exemple. Situé à Scala.Construire un java.util.List à partir d'un java.util.Set dans Scala

Pourquoi cela n'est-il pas possible? Je reçois une erreur: scala.this.Int requise.

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

Cela a fonctionné cependant, mais ne se sent pas bien:

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]]) 

Merci!

+0

Merci pour les réponses! je remarquai que si le type de Set était non spécifié (pas Generics utilisé), cela fonctionne aussi: val sur: Liste [chaîne] = new ArrayList [chaîne] (int.asInstanceOf [Set [chaîne]]) – hammarback

+0

Merci pour la question - en essayant d'y répondre j'ai beaucoup appris sur Scala. BTW, si quelqu'un vous répond, il est poli d'upvote ou d'accepter leur réponse. (Je n'ai pas répondu, mais j'étais reconnaissant à ceux qui l'ont fait) –

+0

Classé dans trac https://lampsvn.epfl.ch/trac/scala/ticket/2119 –

Répondre

2

Vous devez transmettre explicitement la variable de type ArrayList.

Cela fonctionne très bien:

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

Cela fonctionne:

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

Je suppose que le problème est lié en quelque sorte à saisir l'effacement, comme ArrayList est pas paramétrées comme un tableau Scala serait, mais, c'est plutôt un type existentiel. Cela rend probablement l'inférence de type impossible.