Java 在JRuby中强制转换对象
有没有一种方法可以从JRuby显式地将一个Java对象强制转换为另一个Java类 有时我希望能够调用Java 在JRuby中强制转换对象,java,casting,jruby,jruby-java-interop,Java,Casting,Jruby,Jruby Java Interop,有没有一种方法可以从JRuby显式地将一个Java对象强制转换为另一个Java类 有时我希望能够调用SomeJavaClass#aMethod(MySuperClass),而不是从JRuby调用SomeJavaClass#aMethod(MyClass) 在Java中,我会这样做: someJavaObject.aMethod( (MySuperClass) myObj ); 但是我没有看到一个#castruby方法或者类似的方法来从JRuby中实现类似的功能 请注意这个问题缺少对一般情况的答
SomeJavaClass#aMethod(MySuperClass)
,而不是从JRuby调用SomeJavaClass#aMethod(MyClass)
在Java中,我会这样做:
someJavaObject.aMethod( (MySuperClass) myObj );
但是我没有看到一个#cast
ruby方法或者类似的方法来从JRuby中实现类似的功能
请注意这个问题缺少对一般情况的答案,这就是我提出这个问题的原因。您需要使用JRuby 1.4提供的
\java\u send
或\java\u alias
功能来选择要调用的方法。例如:
类Java::JavaUtil::数组
布尔值\u数组\u类=[false]。到\u java(:布尔值)。java\u类
java_别名:boolean_equals,:equals,[boolean_数组类,boolean_数组类]
结束
a1=[假,真]
Java::JavaUtil::Arrays.boolean_等于a1,a1
#=>TypeError:for method Arrays.equals应为[class[Z,class[Z];get:[org.jruby.RubyArray,org.jruby.RubyArray];错误:参数类型不匹配
Java::JavaUtil::Arrays.boolean_等于a1.to_Java(:boolean),a1.to_Java(:boolean)
#=>正确
a2=[对,错]
Java::JavaUtil::Arrays.boolean_等于a1.to_Java(:boolean),a2.to_Java(:boolean)
#=>错误
我认为,如果您试图强制转换为非基本类,那么您应该使用完整的层次结构。因此,要将
obj
转换为ij.text.TextWindow
类,您必须将obj.to_java(java::ij::text::TextWindow)
。