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数组,但尚未成功.关于修复是什么的任何想法?
你需要添加:_*转换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)