将Java数组传递给Scala

8

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

我如何将Java数组传递给Scala?我知道反过来相对简单。但是从Java到Scala并不是那么容易。

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

以下是我尝试实现的一个小例子:

Scala:

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

Java:

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

这个可以吗?
2个回答

18

当然可以!

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

至少,在2.8版本中是这样的。在2.7版本中有很多涉及数组装箱的不同之处,但现在最好使用2.8版本。

所以,是的,它将会和你写的一样工作。


8
是的,完全可以做到,实际上非常容易。下面的代码将按预期工作。
// 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的插件出了问题。 - halfwarp
从这个评论中我理解到你现在遇到了和我一样的问题。在一个Java类中,我有一个调用App.main(args),其中argsString[]类型,而App是一个Scala对象,具有def main(args: Array[String])。现在Eclipse JDT源代码分析器将该调用标记为错误:“类型App中的方法main(Array)对于参数(String[])不适用”。这是无害的,而且错误甚至不会显示在问题视图中。我不知道这是JDT、Scala插件、Scala编译器中的问题,还是以上多个因素的问题。 - MarnixKlooster ReinstateMonica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接