D'abord, vous devez vous assurer que list
a le type java.util.List[SVNDirEntry]
. Pour ce faire, utilisez un casting:
list.asInstanceOf[java.util.List[SVNDirEntry]]
Après cela, la conversion implicite sera résolu pour vous si vous importez l'objet JavaConversions
. Une conversion implicite vers une séquence Scala existe dans l'objet JavaConversions
. Voir l'exemple suivant avec une liste de chaînes étant passé à une méthode qui attend une séquence Scala:
scala> val jvlist: java.util.List[_] = new java.util.ArrayList[String]
jvlist: java.util.List[_] = []
scala> jvlist.asInstanceOf[java.util.List[String]]
res0: java.util.List[String] = []
scala> import collection.JavaConversions._
import collection.JavaConversions._
scala> def perform(scalaseq: Seq[String]) = println("ok")
perform: (scalaseq: scala.collection.Seq[String])Unit
scala> perform(res0)
ok
Ces conversions ne copient pas les éléments - ils construisent simplement une enveloppe autour d'une collection Java. Les deux versions pointent vers les mêmes données sous-jacentes. Ainsi, il n'y a pas de conversion implicite en JavaConversions
pour les listes Scala immuables de listes Java mutables, car cela permettrait de changer le contenu d'une collection Scala qui est garanti immuable. En bref, préférez Seq[...]
à List[...]
lors de la définition de paramètres pour les méthodes si vous pouvez vivre avec une interface moins spécifique (comme dans perform
ci-dessus). Ou écrivez votre propre fonction qui fait la conversion en copiant les éléments.
Merci beaucoup, ça m'a aidé! – trajectory
Vous êtes le seul à lancer la collection Scala, pas celle de Java. –