Wie konvertiere ich Scala scala.List
in Java java.util.List
?
java
scala
scala-java-interop
Alex Baranosky
quelle
quelle
Antworten:
Scala List und Java List sind zwei verschiedene Tiere, da das erstere unveränderlich und das letztere veränderlich ist. Um von einem zum anderen zu gelangen, müssen Sie zuerst die Scala-Liste in eine veränderbare Sammlung konvertieren.
Auf Scala 2.7:
Ab Scala 2.8:
In
asList
diesem Beispiel ist dies jedoch nicht erforderlich, wenn der erwartete Typ Java istList
, da die Konvertierung implizit ist, wie in der letzten Zeile gezeigt.quelle
scala.collection.JavaConverters
ab 2.12Ich bin mir nicht sicher, warum dies noch nicht erwähnt wurde, aber ich denke, der intuitivste Weg ist, die
asJava
Dekorationsmethode von JavaConverters direkt in der Scala-Liste aufzurufen :quelle
Um die vorherigen Antworten zusammenzufassen
Angenommen, wir haben Folgendes
List
:Wenn Sie explizit sein und genau angeben möchten, was Sie konvertieren möchten:
Wenn Sie keine Co-Control-Konvertierungen wünschen und den Compiler implizit für Sie arbeiten lassen möchten :
Es liegt an Ihnen, wie Sie Ihren Code steuern möchten.
quelle
Ziemlich alte Fragen, die ich zwar beantworten werde, aber die meisten Vorschläge sind veraltet.
quelle
object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters
Starten
Scala 2.13
, das Paketscala.jdk.CollectionConverters
bietetasJava
über einen Zuhälter vonSeq
und ersetzt Paketenscala.collection.JavaConverters/JavaConversions
:quelle
Aktualisieren
mit scala 2.9.2:
Ergebnis
quelle
Für einzelne Aufrufe ist es möglicherweise die einfachste Lösung, dies von Hand zu tun:
Ich habe die Leistung nicht gemessen.
quelle
Wenn Sie wie oben vorgeschlagen vorgehen, wird die Liste auch auf der Java-Seite unveränderlich. Die einzige funktionierende Lösung, die ich gefunden habe, ist folgende:
quelle
Seit Scala 2.12.0 ist JavaConversions veraltet.
Die einfachste Lösung für mich war also:
quelle
import scala.collection.JavaConverters._
für 2.12.4