如何将Scala Seq传递给Java varargs

如何将Scala Seq传递给Java varargs,java,scala,variadic-functions,Java,Scala,Variadic Functions,我有一个现有的Java方法,如下所示: public static MyJavaClass javaFunc(String name, long... values) { ... } val idList: Seq[Long] = Seq(1L, 2L, 3L) MyJavaClass.javaFuncConverter("hello", idList.toArray) MyJavaClass.javaFuncConverter("hello", idList.head) 我需要用

我有一个现有的Java方法,如下所示:

public static MyJavaClass javaFunc(String name, long... values) {
    ...
}
val idList: Seq[Long] = Seq(1L, 2L, 3L)

MyJavaClass.javaFuncConverter("hello", idList.toArray)
MyJavaClass.javaFuncConverter("hello", idList.head)
我需要用这个从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)
我怎样才能传递参数?

这就成功了:

import scala.collection.JavaConverters._
val javaList = idList.asJava

我无法在Scala2.10.4和Java8上重现这一点,但它似乎是一个bug

通过添加以下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代码中,您可以这样称呼它:

public static MyJavaClass javaFunc(String name, long... values) {
    ...
}
val idList: Seq[Long] = Seq(1L, 2L, 3L)

MyJavaClass.javaFuncConverter("hello", idList.toArray)
MyJavaClass.javaFuncConverter("hello", idList.head)

它对我来说是这样工作的

这应该正常工作,你会得到什么错误?这听起来更像是一个编译器错误,让我有点困惑。这个类有其他构造函数吗?也不能复制它。顺便说一句,你使用的是哪个Scala版本?有很多看起来相同但略有不同的版本。这实际上是一个ElasticSearch类:FilterBuilders.TermsFilterBuilder可以肯定的是,有TermsFilterBuilder,它只需要一个long,还有TermsFilterBuilder,它需要varargs。你有没有检查打字错误?你现在有java列表了。那么,如何将其作为java的varargs传递到参数中呢?