JSR223: Aufruf von Java- "varargs" -Methoden aus dem Skript

8

Ich habe eine Methode, die auf Java so aussieht:

%Vor%

Aber ich kann diese Methode nicht wie erwartet von den Skripten aus aufrufen.

Wenn ich in Ruby:

%Vor%

Es gibt mir org.jruby.exceptions.RaiseException: could not coerce Fixnum to class [Ljava.lang.Object

Wenn ich Folgendes in Javascript versuche:

%Vor%

Dann gibt es mir sun.org.mozilla.javascript.internal.EvaluatorException: Can't find method MyClass.test(number). (#2) in at line number 2

Natürlich, wenn ich die Signatur ändere, um ein einzelnes Objekt zu nehmen, funktioniert es.

Ich nehme an, dass dies daran liegt, dass jemand entlang der Linie nicht wissen kann, wie man konvertiert, sagen wir Integer zu Integer[] mit dem Wert an der ersten Position.

Ich glaube, etwas wie myMethod({42, 2009}) würde in Ruby funktionieren, aber das scheint hässlich zu sein - ich wollte einfach myMethod(42, 2009) machen, um es weniger verwirrend zu machen, speziell für andere Sprachen. Gibt es eine bessere Problemumgehung dafür?

Danke.

    
John Without Arms 04.07.2009, 21:15
quelle

3 Antworten

2

Java behandelt die Argumentliste mit variabler Länge intern als Array, dessen Elemente alle den gleichen Typ haben. Aus diesem Grund müssen Sie in Ihrem JRuby-Skript ein Array von Objekten bereitstellen.

Es funktioniert so:

%Vor%

Die Methode to_java konstruiert ein Java-Array aus einem Ruby-Array. Standardmäßig erstellt to_java in diesem Fall Object-Arrays nach Bedarf. Wenn Sie ein String-Array benötigen, verwenden Sie

%Vor%

Mehr dazu im JRuby-Wiki

    
MartinGross 16.10.2009 11:10
quelle
0

Varargs werden vom Compiler als ein Object [] behandelt, was die Fehlermeldung beschreibt.

Ich habe keine JRuby-Erfahrung, aber funktioniert es, wenn Sie ein Array-Argument haben?

    
quelle