objetos de fundición en JRuby
-
22-09-2019 - |
Pregunta
¿Hay alguna manera de convertir explícitamente un objeto de Java a otra clase Java desde JRuby?
A veces quiero ser capaz de invocar SomeJavaClass#aMethod(MySuperClass)
en lugar de SomeJavaClass#aMethod(MyClass)
de JRuby.
A partir de Java, que haría esto:
someJavaObject.aMethod( (MySuperClass) myObj );
pero no vi un método #cast
rubí o algo por el estilo para hacer el equivalente de JRuby.
Nota: casting Objetos Java De JRuby carece de una respuesta para el caso general, que es por eso que estoy re-hacer la pregunta.
Solución
Se necesita hacer uso de cualquiera de los #java_send o #java_alias disponen de partida disponible con JRuby 1.4 para seleccionar el método que desea llamar. Ejemplo:
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow