将Java数组传递给Scala

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

如何将Java数组传递给Scala? 我知道反过来相当简单。 Java to Scala并非如此。

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

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

斯卡拉:

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

Java的:

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

这可能吗?

绝对!

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

至少,这是2.8的情况。 2.7中的情况略有不同,涉及大量arrays拳击,但理想情况下你现在应该在2.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