Zunächst müssen Sie sicherstellen, dass list
hat den Typ java.util.List[SVNDirEntry]
. Verwenden Sie dazu einen Gips:
list.asInstanceOf[java.util.List[SVNDirEntry]]
Danach wird die implizite Konvertierung für Sie aufgelöst, wenn Sie die JavaConversions
Objekt. Eine implizite Konvertierung in eine Scala-Sequenz existiert in der JavaConversions
Objekt. Siehe das folgende Beispiel mit einer Liste von Strings, die an eine Methode übergeben wird, die eine Scala-Sequenz erwartet:
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
Bei diesen Konvertierungen werden die Elemente nicht kopiert, sondern es wird lediglich ein Wrapper um eine Java-Sammlung konstruiert. Beide Versionen verweisen auf die gleichen zugrunde liegenden Daten. Daher gibt es keine implizite Konvertierung in JavaConversions
zu unveränderlichen Scala-Listen aus veränderlichen Java-Listen zu machen, denn das würde es ermöglichen, den Inhalt einer Scala-Sammlung, die garantiert unveränderlich ist, zu ändern.
Kurz gesagt - bevorzugen Seq[...]
a List[...]
bei der Definition von Parametern für Methoden, wenn Sie mit einer weniger spezifischen Schnittstelle leben können (wie in perform
oben). Oder schreiben Sie eine eigene Funktion, die die Umwandlung durch Kopieren der Elemente vornimmt.