将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