【问题标题】:Passing Java array to Scala将 Java 数组传递给 Scala
【发布时间】:2011-04-25 20:06:13
【问题描述】:

虽然我使用 Scala 已经有一段时间了,之前也将它与 Java 混合过,但我遇到了一个问题。

如何将 Java 数组传递给 Scala?我知道反过来也很简单。然而,Java 到 Scala 并非如此。

我应该在 Scala 中声明我的方法吗?

这是我想要实现的一个小例子:

斯卡拉:

def sumArray(ar: Array[Int]) = ...

Java:

RandomScalaClassName.sumArray(new int[]{1,2,3});

这可能吗?

【问题讨论】:

    标签: java scala scala-2.8


    【解决方案1】:

    绝对!

    Scala 中的Array[T]直接 映射到Java 类型T[]。它们在字节码中的表示完全相同。

    至少,在 2.8 中是这样的。 2.7 中的情况略有不同,涉及到大量的数组装箱,但理想情况下,您现在应该使用 2.8。

    所以是的,它会完全按照你写的那样工作。

    【讨论】:

      【解决方案2】:

      是的,这是完全可能的,实际上非常容易。以下代码将按预期工作。

      // TestArray.scala
      object TestArray {
          def test (array: Array[Int]) = array.foreach (println _)
      }
      

      -

      // Sample.java
      public class Sample
      {
          public static void main (String [] args) {
              int [] x = {1, 2, 3, 4, 5, 6, 7};
              TestArray.test (x);
          }
      }
      

      使用以下命令编译/运行。

      $scalac TestArray.scala
      $javac -cp .:/opt/scala-2.8.0/lib/scala-library.jar Sample.java
      $java -cp .:/opt/scala-2.8.0/lib/scala-library.jar Sample
      

      【讨论】:

      • 谢谢。这是 Eclipse 的插件错误。
      • 从这条评论中,我了解到您遇到了与我现在看到的相同的问题。在 Java 类中,我有一个调用 App.main(args),其中 args 的类型为 String[]App 是带有 def main(args: Array[String]) 的 Scala object。现在 Eclipse JDT 源代码分析器将该调用标记为错误:“App 类型中的方法 main(Array) 不适用于参数 (String[])”。这是无害的,而且该错误甚至不会出现在“问题”视图中。我不知道这是JDT,Scala插件,Scala编译器还是上述多个方面的问题。
      猜你喜欢
      • 2015-07-18
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多