JavaからScalaメソッドを呼び出しています。SeqからListに変換する必要があります。
Scalaメソッドのシグネチャを変更できないため、scala.collection.JavaConversions._
のasJavaCollection
メソッドを使用できません。
どうすればこれを達成できるでしょうか?
Scala 2.9.3を使用
JavaConversions
を使用して正しい方向に進んでいますが、この特定の変換に必要な方法はseqAsJavaList
です。
Java.util.List<String> convert(scala.collection.Seq<String> seq) {
return scala.collection.JavaConversions.seqAsJavaList(seq);
}
更新:JavaConversions
は非推奨ですが、同じ関数が JavaConverters
にあります。
Java.util.List<String> convert(scala.collection.Seq<String> seq) {
return scala.collection.JavaConverters.seqAsJavaList(seq);
}
Scala 2.9以降、JavaConversions
からの暗黙は使用すべきではありません。これらは非推奨であり、間もなく削除される予定です。代わりに、Seq
をJava List
に変換するには、次のようにconvert
パッケージを使用します(ただし、見た目はよくありません)。
import scala.collection.convert.WrapAsJava$;
public class Test {
Java.util.List<String> convert(scala.collection.Seq<String> seq) {
return WrapAsJava$.MODULE$.seqAsJavaList(seq);
}
}
2.12以降、これが推奨される方法です。
_public static <T> Java.util.List<T> convert(scala.collection.Seq<T> seq) {
return scala.collection.JavaConverters.seqAsJavaList(seq);
}
_
他のすべてのメソッドa @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")
(Scalaコードでこの変換を行う場合)
JavaConvertersを使用して、これを本当に簡単にすることができます。
import collection.JavaConverters._
val s: Seq[String] = ...
val list: Java.util.List<String> = s.asJava