Передача массива Java в Scala - PullRequest
       15

Передача массива Java в Scala

7 голосов
/ 15 октября 2010

Хотя я уже некоторое время использую Scala и ранее смешивал его с Java, я столкнулся с проблемой.

Как передать массив Java в Scala? Я знаю, что наоборот довольно просто. Java для Scala не так, однако.

Должен ли я объявить мой метод в Scala?

Вот небольшой пример того, чего я пытаюсь достичь:

Scala:

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

Java:

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

Возможно ли это?

Ответы [ 2 ]

16 голосов
/ 15 октября 2010

абсолютно!

Класс Array[T] в Scala сопоставляется напрямую с типом Java T[]. Они оба имеют одинаковое представление в байт-коде.

По крайней мере, так обстоит дело в 2.8. В 2.7 все было немного по-другому, с множеством включенных массивов, но в идеале вы должны работать над 2.8 в настоящее время.

Так что да, это будет работать именно так, как вы написали.

8 голосов
/ 15 октября 2010

Да, это вполне возможно и на самом деле очень просто. Следующий код будет работать как положено.

// 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
...