我有一个像这样的现有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)
我如何传递参数?
答案 0 :(得分:1)
这就是诀窍:
import scala.collection.JavaConverters._
val javaList = idList.asJava
答案 1 :(得分:1)
// 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: _*)
}
}
它对我来说就是这样
答案 2 :(得分:0)
我无法在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)