8
votes

JSR223: Calling Java "Varargs" Méthodes du script

J'ai une méthode qui ressemble à ceci sur Java: xxx

mais je ne peux pas appeler cette méthode comme prévu des scripts.

Si, dans Ruby , Je fais: xxx

Ça me donne org.jruby.exception.raiseException: ne peut pas coercer fixnum en classe [ljava.lang.Object < / p>

Si j'essaie ce qui suit dans JavaScript: xxx

alors il me donne sun.org.mozilla.javascript.internal.evaluatorexception: peut ' T Trouvez la méthode myClass.test (numéro). (# 2) en ligne numéro 2

Bien sûr, si je change la signature pour prendre un seul objet, il fonctionne.

Je suppose que c'est parce que c'est parce que Quelqu'un sur la ligne ne sait pas comment convertir, disons entier sur entier [] avec la valeur à la première position.

Je crois quelque chose comme MyMethod ({42, 2009}) fonctionnerait dans Ruby, mais cela semble laid - je voulais pouvoir juste faire MyMethod (42, 2009) pour le faire moins déroutant, spécialement pour d'autres langues. Y a-t-il une meilleure solution de contournement pour cela?

Merci.


0 commentaires

3 Réponses :


1
votes

On dirait que ceci est un bug connu dans Jruby. Voir Expédition de la méthode sur les objets / classes Java devrait essayer de trouver une méthode de varargs correspondante et < Un href = "http://jira.codehaus.org/browse/jruby-1924" rel = "NOFOollow NOREFERRER"> NomError jeté lorsque vous essayez de passer l'argument à une méthode Java définie comme ayant des arguments de longueur variable .

Selon le lien Rhino fait Support Vararg .


0 commentaires

0
votes

varargs sont traités par le compilateur comme objet [] qui est ce que le message d'erreur décrit.

Je n'ai pas d'expérience Jruby, mais cela fonctionne-t-il si vous avez un argument de tableau?


0 commentaires

2
votes

Java traite en interne la liste d'arguments de longueur variable en tant que tableau dont les éléments sont tous du même type. C'est la raison pour laquelle vous devez fournir un éventail d'objets dans votre script Jruby.

Cela fonctionne comme ceci: p> xxx pré>

le to_java code> La méthode construit une matrice Java à partir d'un tableau Ruby. Par défaut, to_java code> construit des tableaux d'objet selon les besoins dans ce cas. Si vous avez besoin d'une matrice de chaîne, vous utiliseriez P>

["a","b","c"].to_java(:string)


1 commentaires

Un autre exemple: Jruby -rjava -e 'FMT = Java.Util.Formatter.Nouveau (); met FMT.Format ("|% 4s |", ["ÜÜ"]. TO_JAVA) '