儘管我一直在使用Scala並將其與Java混合,但我碰到了問題。如何將Java數組傳遞給Scala?我知道,如果相當簡單,反過來。但是Java到Scala並不是這樣。將Java數組傳遞給Scala
我應該在Scala中聲明我的方法嗎?
這裏是我想要達到一個小例子:
斯卡拉:
def sumArray(ar: Array[Int]) = ...
的Java:
RandomScalaClassName.sumArray(new int[]{1,2,3});
這可能嗎?
儘管我一直在使用Scala並將其與Java混合,但我碰到了問題。如何將Java數組傳遞給Scala?我知道,如果相當簡單,反過來。但是Java到Scala並不是這樣。將Java數組傳遞給Scala
我應該在Scala中聲明我的方法嗎?
這裏是我想要達到一個小例子:
斯卡拉:
def sumArray(ar: Array[Int]) = ...
的Java:
RandomScalaClassName.sumArray(new int[]{1,2,3});
這可能嗎?
絕對!
斯卡拉的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
謝謝。這是Eclipse的插件錯誤。 – halfwarp 2010-10-15 13:01:37
從這個評論我明白,你有我現在看到的同樣的問題。在一個Java類中,我有一個調用'App.main(args)',其中'args'的類型是String []',而'App'是一個帶有'def main(args:Array [字符串])'。現在,Eclipse JDT源分析器將該調用標記爲錯誤:「類型App中的main(Array)方法不適用於參數(String [])」。這是無害的,並且該錯誤甚至不會顯示在「問題」視圖中。我不知道這是否是JDT,Scala插件,Scala編譯器或上述多個版本中的問題。 – 2011-04-23 06:41:25