ram*_*ion 11 java casting jruby jruby-java-interop
有没有办法可以从JRuby显式地将一个Java对象转换为另一个Java类?
有时我希望能够调用SomeJavaClass#aMethod(MySuperClass)而不是SomeJavaClass#aMethod(MyClass)从JRuby 调用.
从Java开始,我会这样做:
someJavaObject.aMethod( (MySuperClass) myObj );
Run Code Online (Sandbox Code Playgroud)
但我没有看到一个#castruby方法或类似的东西来做JRuby中的等效方法.
请注意,从JRuby转换Java对象的问题缺乏对一般情况的答案,这就是我重新提出问题的原因.
Nic*_*ger 10
您需要使用从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
Run Code Online (Sandbox Code Playgroud)