2017-03-20 5 views
2

J'ai un code Scala qui doit appeler une méthode Java 7 qui est défini comme suit:tableau Scala [chaîne] à chaîne Java varargs

public void addListener(InputListener listener, String... mappingNames) { 
    <details omitted here for brevity> 
} 

Voici mon code Scala qui appellent addListener:

inputManager.addListener(myListener, getActionInputs()) 

// Then the getActionInputs method: 
def getActionInputs() : Array[String] = { 
    Array("Red", "Fruit", "Cow") 
} 

Cela donne une erreur du compilateur:

Type mistmatch, expected: String, actual: Array[String]

J'ai essayé d'importer le conversio Java/Scala ns classes pour convertir ma Scala Array[String] en un tableau Java, mais n'ont pas réussi. Des idées sur ce que le correctif est?

Répondre

4

Vous devez ajouter :_* pour transformer le Array[String] à varargs:

Java:

public class C { 
    public void addListener(String... mappingNames) { 
     System.out.println(Arrays.toString(mappingNames)); 
    } 
} 

Scala:

def main(args: Array[String]): Unit = { 
    val c = new C 
    c.addListener(Array("a", "b", "c") :_*) 
} 

Rendement:

[a, b, c] 
+0

est-ce pas seulement pour Scala Varargs? –

+0

J'ai créé un petit échantillon et il semble fonctionner –

+0

Il semble que vous avez raison. Je ne pense pas que c'était toujours le cas. Est-ce nouveau depuis 2.12? –