12

我有一个像这样的现有 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)

我怎样才能通过论点?

4

3 回答 3

2
// 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: _*)
  }
}

它对我来说是这样的

于 2020-06-20T14:38:52.267 回答
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)
于 2020-06-03T07:53:58.270 回答
-1

这成功了:

import scala.collection.JavaConverters._
val javaList = idList.asJava
于 2013-06-14T20:15:44.297 回答