簡體   English   中英

如何將 Scala Seq 傳遞給 Java 可變參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM