在JRuby中投射对象
-
22-09-2019 - |
题
有没有一种方法,我可以明确地投一个Java对象到另一个Java类从JRuby的?
有时候,我希望能够从JRuby中调用SomeJavaClass#aMethod(MySuperClass)
而非SomeJavaClass#aMethod(MyClass)
。
从Java,我应该这样做:
someJavaObject.aMethod( (MySuperClass) myObj );
但是我没有看到一个#cast
红宝石方法或类似的东西进行从JRuby的等同物。
解决方案
您需要利用无论是#java_send或#java_alias的功能开始可用的JRuby 1.4,选择你想呼叫的方法。例如:
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