Scala Array [String]到Java String varargs

sme*_*eeb 4 scala variadic-functions

我有一些需要调用Java 7方法的Scala代码,其定义如下:

public void addListener(InputListener listener, String... mappingNames) {
    <details omitted here for brevity>
}
Run Code Online (Sandbox Code Playgroud)

这是我的Scala代码addListener:

inputManager.addListener(myListener, getActionInputs())

// Then the getActionInputs method:
def getActionInputs() : Array[String] = {
  Array("Red", "Fruit", "Cow")
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译器错误:

输入mistmatch,expected:String,actual:Array [String]

我尝试导入Java/Scala转换类以将我的Scala转换Array[String]为Java数组,但尚未成功.关于修复是什么的任何想法?

Yuv*_*kov 8

你需要添加:_*转换Array[String]为varargs:

Java的:

public class C {
    public void addListener(String... mappingNames) {
        System.out.println(Arrays.toString(mappingNames));
    }
}
Run Code Online (Sandbox Code Playgroud)

斯卡拉:

def main(args: Array[String]): Unit = {
  val c = new C
  c.addListener(Array("a", "b", "c") :_*)
}
Run Code Online (Sandbox Code Playgroud)

产量:

[a, b, c]
Run Code Online (Sandbox Code Playgroud)