虽然我已经使用Scala一段时间并且之前也将其与Java混合使用过,但我遇到了一个问题。
我如何将Java数组传递给Scala?我知道反过来相对简单。但是从Java到Scala并不是那么容易。
我应该在Scala中声明我的方法吗?
以下是我尝试实现的一个小例子:
Scala:
def sumArray(ar: Array[Int]) = ...
Java:
RandomScalaClassName.sumArray(new int[]{1,2,3});
这个可以吗?
当然可以!
在Scala中,Array[T]
类直接映射到Java类型T[]
。它们在字节码中的表示完全相同。
至少,在2.8版本中是这样的。在2.7版本中有很多涉及数组装箱的不同之处,但现在最好使用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
App.main(args)
,其中args
是String[]
类型,而App
是一个Scala对象,具有def main(args: Array[String])
。现在Eclipse JDT源代码分析器将该调用标记为错误:“类型App中的方法main(Array)对于参数(String[])不适用”。这是无害的,而且错误甚至不会显示在问题视图中。我不知道这是JDT、Scala插件、Scala编译器中的问题,还是以上多个因素的问题。 - MarnixKlooster ReinstateMonica