JRubyの内のオブジェクトをキャスト
-
22-09-2019 - |
質問
私は明示的にはJRubyから別のJavaクラスに1つのJavaオブジェクトをキャストすることができます方法はありますか?
時々私はJRubyのからSomeJavaClass#aMethod(MySuperClass)
ではなく、SomeJavaClass#aMethod(MyClass)
を呼び出すことができるようにしたいです。
Javaから、私はこれを行うと思います:
someJavaObject.aMethod( (MySuperClass) myObj );
私はJRubyのから同等の操作を行うためにそのよう#cast
ルビー法または何も表示されませんでした。
注 は、Javaが私は質問を再求めている理由である一般的なケース、のための答えを欠いています。
解決
あなたが呼び出したいメソッドを選択するためには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
所属していません StackOverflow