[英]How to pass Scala Seq to a Java varargs
我有一個這樣的現有 Java 方法:
public static MyJavaClass javaFunc(String name, long... values) {
...
}
我需要從 Scala 調用它:
val idList: Seq[Long] = Seq(1L, 2L, 3L)
MyJavaClass.javaFunc("hello", idList)
但它最終會調用 idList 參數上的 toString 方法。 我嘗試了以下方法無濟於事:
MyJavaClass.javaFunc("hello", idList:_*)
這會導致編譯錯誤:
no `: _*' annotation allowed here (such annotations are only allowed in arguments to *-parameters)
我怎樣才能通過這個論點?
// java class
public class MyJavaClass {
public static void javaFunc(String name, long ...values) {
for (long i: values)
System.out.print(i + " ");
System.out.println();
}
}
//scala class
object Y {
def main(args: Array[String]): Unit = {
val idList: Seq[Long] = Seq(1L, 2L, 3L)
MyJavaClass.javaFunc("hello", idList: _*)
}
}
它對我來說是這樣工作的
我無法在 Scala 2.10.4 和 Java 8 上重現這個,但這似乎是一個錯誤。
您可以通過添加以下 Java 方法來避免: _*
:
public static MyJavaClass javaFuncConverter(String name, long[] values) {
return javaFunc(name, values);
}
public static MyJavaClass javaFuncConverter(String name, long value) {
return javaFunc(name, value);
}
在您的 Scala 代碼中,您可以這樣稱呼它:
val idList: Seq[Long] = Seq(1L, 2L, 3L)
MyJavaClass.javaFuncConverter("hello", idList.toArray)
MyJavaClass.javaFuncConverter("hello", idList.head)
這做到了:
import scala.collection.JavaConverters._
val javaList = idList.asJava
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.