12

JRuby からある Java オブジェクトを別の Java クラスに明示的にキャストする方法はありますか?

JRuby から SomeJavaClass#aMethod(MySuperClass)ではなく、起動できるようにしたい場合があります。SomeJavaClass#aMethod(MyClass)

Java からは、次のようにします。

someJavaObject.aMethod( (MySuperClass) myObj );

しかし#cast、JRuby から同等のことを行うための ruby​​ メソッドやそのようなものは見当たりませんでした。

JRuby から Java オブジェクトをキャストするという質問には、一般的なケースに対する回答がないことに注意してください。

4

1 に答える 1

11

呼び出すメソッドを選択するには、JRuby 1.4 以降で利用可能な#java_sendまたは機能を使用する必要があります。#java_alias例:

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
于 2009-11-24T22:02:37.463 に答える