12
votes

Comment passer Scala SEQ à un Vararg Java

J'ai une méthode Java existante comme celle-ci: xxx

et j'ai besoin de l'appeler de Scala avec ceci: xxx

mais Il finit par appeler la méthode de totring sur le paramètre IDList. J'ai essayé ce qui suit en vain n'est disponible: xxx

qui provoque une erreur de compilation: xxx

Comment puis-je passer le argument?


8 commentaires

Cela devrait normalement fonctionner, quelle erreur obtenez-vous?


Cela ressemble plus à une erreur de compilateur qui me confond un peu. Cette classe a-t-elle d'autres constructeurs?


Ne peut pas le reproduire non plus. BTW Quelle version Scala utilisez-vous?


Il y a beaucoup d'entre eux qui ont l'air identique mais légèrement différent. C'est en fait une classe ElasseSearch: FilterBuilders.TermsFilterBuilder


Utilisation de SCALA 2.10 - Vous avez raison - il s'agit d'une erreur de compilation. Mais toujours, comment puis-je l'appeler?


Juste pour être sûr, il y a TermfilterBuilder, qui ne prend qu'un seul long et long-TRANSFILTERBUILDER, qui prend les varargs. Avez-vous vérifié pour une faute de frappe?


C'était un bogue dans Scala 2.10.0, devrait être fixé en 2.10.1


Au cas où n'importe qui se demande quel : _ * est: Stackoverflow.com/a/6051356/194894


3 Réponses :


-1
votes

Ceci a fait l'astuce: xxx


1 commentaires

Vous avez une liste Java maintenant. Alors, comment vous allez le transmettre en paramètre comme Varargs de Java?



0
votes

Je ne peux pas reproduire cela sur Scala 2.10.4 et Java 8, mais cela semble être un bug.

Vous pouvez éviter le : _ * en ajoutant ces méthodes Java: xxx

dans votre code SCALA, vous l'appelez comme ceci: xxx


0 commentaires

2
votes
//scala class
object Y {
  def main(args: Array[String]): Unit = {
    val idList: Seq[Long] = Seq(1L, 2L, 3L)
    MyJavaClass.javaFunc("hello", idList: _*)
  }
}

0 commentaires