J'ai une méthode qui ressemble à ceci sur Java: mais je ne peux pas appeler cette méthode comme prévu des scripts. P> Si, dans Ruby , Je fais: p> Ça me donne Si j'essaie ce qui suit dans JavaScript: p> alors il me donne Bien sûr, si je change la signature pour prendre un seul objet, il fonctionne. P> Je suppose que c'est parce que c'est parce que Quelqu'un sur la ligne ne sait pas comment convertir, disons Je crois quelque chose comme Merci. P> P> org.jruby.exception.raiseException: ne peut pas coercer fixnum en classe [ljava.lang.Object code> < / p>
sun.org.mozilla.javascript.internal.evaluatorexception: peut ' T Trouvez la méthode myClass.test (numéro). (# 2) en ligne numéro 2 code> p>
entier code> sur
entier [] code> avec la valeur à la première position. P>
MyMethod ({42, 2009}) CODE> fonctionnerait dans Ruby, mais cela semble laid - je voulais pouvoir juste faire
MyMethod (42, 2009) Code> pour le faire moins déroutant, spécialement pour d'autres langues. Y a-t-il une meilleure solution de contournement pour cela? P>
3 Réponses :
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 . p>
Selon le lien Rhino fait Support Vararg . p>
varargs sont traités par le compilateur comme objet [] qui est ce que le message d'erreur décrit. P>
Je n'ai pas d'expérience Jruby, mais cela fonctionne-t-il si vous avez un argument de tableau? p>
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> 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)
Un autre exemple: Jruby -rjava -e 'FMT = Java.Util.Formatter.Nouveau (); met FMT.Format ("|% 4s |", ["ÜÜ"]. TO_JAVA) '