Question

Y at-il une manière que je peux explicitement jeter un objet Java à une autre classe Java de JRuby?

Parfois, je veux être en mesure d'invoquer SomeJavaClass#aMethod(MySuperClass) plutôt que SomeJavaClass#aMethod(MyClass) de JRuby.

De Java, je ferais ceci:

someJavaObject.aMethod( (MySuperClass) myObj );

mais je ne vois pas une méthode rubis #cast ou quelque chose comme ça pour faire l'équivalent de JRuby.

Remarque que la question casting objets Java JRuby manque une réponse pour le cas général, ce qui est la raison pour laquelle je suis re-poser la question.

Était-ce utile?

La solution

Vous devez utiliser soit le #java_send ou #java_alias disposent disponible à partir de JRuby 1.4 pour sélectionner la méthode que vous souhaitez appeler. Exemple:

class Java::JavaUtil::Arrays
  boolean_array_class = [false].to_java(:boolean).java_class
  java_alias :boolean_equals, :equals, [boolean_array_class, boolean_array_class]
end

a1 = [false, true]
Java::JavaUtil::Arrays.boolean_equals a1, a1
# => TypeError: for method Arrays.equals expected [class [Z, class [Z]; got: [org.jruby.RubyArray,org.jruby.RubyArray]; error: argument type mismatch
Java::JavaUtil::Arrays.boolean_equals a1.to_java(:boolean), a1.to_java(:boolean)
# => true
a2 = [true, false]
Java::JavaUtil::Arrays.boolean_equals a1.to_java(:boolean), a2.to_java(:boolean)
# => false
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top