2010-10-15 93 views
4

儘管我一直在使用Scala並將其與Java混合,但我碰到了問題。如何將Java數組傳遞給Scala?我知道,如果相當簡單,反過來。但是Java到Scala並不是這樣。將Java數組傳遞給Scala

我應該在Scala中聲明我的方法嗎?

這裏是我想要達到一個小例子:

斯卡拉:

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

的Java:

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

這可能嗎?

回答

12

絕對!

斯卡拉的Array[T]類映射到直接到Java類型T[]。它們在字節碼中的表示完全相同。

至少2.8是這種情況。 2.7中的事情有點不同,有大量的數組拳擊,但理想的情況是,你現在應該在2.8上工作。

所以是的,它的工作原理與你寫的一樣。

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 
+0

謝謝。這是Eclipse的插件錯誤。 – halfwarp 2010-10-15 13:01:37

+0

從這個評論我明白,你有我現在看到的同樣的問題。在一個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