Frage

Gibt es eine Weise, die ich explizit werfen kann ein Java-Objekt in einer anderen Java-Klasse von JRuby?

Manchmal möchte ich in der Lage sein SomeJavaClass#aMethod(MySuperClass) aufzurufen, anstatt SomeJavaClass#aMethod(MyClass) von JRuby.

Von Java, würde ich dies tun:

someJavaObject.aMethod( (MySuperClass) myObj );

, aber ich habe keine #cast Rubin Methode oder so etwas sehen das Äquivalent von JRuby zu tun.

Hinweis , dass die Frage Casting Java-Objekte aus JRuby fehlt eine Antwort für den allgemeinen Fall, weshalb ich die Frage erneut zu stellen.

War es hilfreich?

Lösung

müssen Sie verwenden entweder der #java_send oder #java_alias Features verfügbar beginnend mit JRuby 1.4 zur Auswahl der Methode, die Sie anrufen möchten machen. Beispiel:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top