【问题标题】:Scala Array[String] to Java String varargsScala Array[String] 到 Java String varargs
【发布时间】:2017-03-20 15:16:15
【问题描述】:

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

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

这是我调用 addListener 的 Scala 代码:

inputManager.addListener(myListener, getActionInputs())

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

这会产生编译器错误:

类型不匹配,预期:String,实际:Array[String]

我尝试导入 Java/Scala 转换类以将我的 Scala Array[String] 转换为 Java 数组,但没有成功。关于修复的任何想法?

【问题讨论】:

    标签: scala variadic-functions


    【解决方案1】:

    您需要添加:_* 以将Array[String] 转换为可变参数:

    Java:

    public class C {
        public void addListener(String... mappingNames) {
            System.out.println(Arrays.toString(mappingNames));
        }
    }
    

    斯卡拉:

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

    产量:

    [a, b, c]
    

    【讨论】:

    • 这不只适用于 Scala 可变参数吗?
    • 看来你是对的。我不认为过去总是如此。这是自 2.12 以来的新功能吗?
    • @Jasper-M 我在 2.11.8 上运行了这个
    • 是的,好像一直都是这样。现在我想知道为什么我认为它不是......
    • @Jasper-M 我发现的最古老的问题是 2010 年的一个论坛问题,Scala 2.8.0 声称这是有效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2019-11-23
    • 2021-10-16
    • 2017-02-17
    相关资源
    最近更新 更多