2010-10-15 7 views
4

Bien que j'utilise Scala depuis un moment, et que je le mélange aussi avec Java, j'ai rencontré un problème. Comment puis-je transmettre un tableau Java à Scala? Je sais que c'est l'inverse si c'est assez simple. Java à Scala n'est pas si cependant.Passer un tableau Java à Scala

Je devrais déclarer ma méthode dans Scala?

Voici un petit exemple de ce que je suis en train de réaliser:

Scala:

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

Java:

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

Est-ce possible?

Répondre

12

absolument!

La classe Array[T] à Scala est mis en correspondance directement du type Java T[]. Ils ont tous deux exactement la même représentation en bytecode.

Au moins, c'est le cas dans 2.8. Les choses étaient un peu différentes en 2.7, avec beaucoup de boxe en jeu, mais idéalement, vous devriez travailler sur 2.8 de nos jours.

Alors oui, cela fonctionnera exactement comme vous l'avez écrit.

8

Oui, c'est totalement possible et en fait très facile. Le code suivant fonctionnera comme prévu.

// 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); 
    } 
} 

Utilisez la commande suivante pour compiler/exécuter.

$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

Merci. C'était la faute du plugin d'Eclipse. – halfwarp

+0

De ce commentaire, je comprends que vous avez eu le même problème que je vois en ce moment. Dans une classe Java, j'ai un appel 'App.main (args)', où 'args' est de type' String [] ', et' App' est un 'object' Scala avec un' def main (args: Array [ Chaîne]) '. L'analyseur de source Eclipse JDT marque maintenant cet appel comme une erreur: "La méthode main (Array) dans le type App n'est pas applicable pour les arguments (String [])". Ceci est inoffensif et l'erreur n'apparaît même pas dans la vue des problèmes. Je ne sais pas si c'est un problème dans le JDT, dans le plug-in Scala, dans le compilateur Scala, ou dans plusieurs de ce qui précède. –

Questions connexes