将Java数组传递给Scala
虽然我使用Scala已经有一段时间了,并且之前已经将它与Java混合在一起,但我遇到了一个问题 如何将Java数组传递给Scala?我知道另一种方法相当简单。然而,Java到Scala并非如此 我应该在Scala中声明我的方法吗 下面是一个我正在努力实现的小例子: 斯卡拉:将Java数组传递给Scala,java,scala,scala-2.8,Java,Scala,Scala 2.8,虽然我使用Scala已经有一段时间了,并且之前已经将它与Java混合在一起,但我遇到了一个问题 如何将Java数组传递给Scala?我知道另一种方法相当简单。然而,Java到Scala并非如此 我应该在Scala中声明我的方法吗 下面是一个我正在努力实现的小例子: 斯卡拉: def sumArray(ar: Array[Int]) = ... 爪哇: 这是可能的吗?是的,这是完全可能的,事实上非常容易。以下代码将按预期工作 // TestArray.scala object TestArray
def sumArray(ar: Array[Int]) = ...
爪哇:
这是可能的吗?是的,这是完全可能的,事实上非常容易。以下代码将按预期工作
// TestArray.scala
object TestArray {
def test (array: Array[Int]) = array.foreach (println _)
}
-
使用以下命令编译/运行
$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
绝对是
Scala中的Array[T]
类直接映射到Java类型T[]
。它们在字节码中的表示形式完全相同
至少在2.8中是这样。在2.7中情况有所不同,涉及到很多数组装箱,但理想情况下,您现在应该使用2.8
因此,是的,它将完全按照您所写的那样工作。谢谢。这是Eclipse的插件错误。从这条评论中,我了解到您遇到了与我现在看到的相同的问题。在Java类中,我有一个调用
App.main(args)
,其中args
是String[]
类型,而App
是带有defmain(args:Array[String])
的Scala对象。现在EclipseJDT源代码分析器将该调用标记为错误:“类型应用程序中的方法main(数组)不适用于参数(字符串[])”。这是无害的,错误甚至不会显示在Problems视图中。我不知道这是JDT、Scala插件、Scala编译器中的问题,还是上述多个方面的问题。
// 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