Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JRuby中强制转换对象_Java_Casting_Jruby_Jruby Java Interop - Fatal编程技术网

Java 在JRuby中强制转换对象

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中实现类似的功能 请注意这个问题缺少对一般情况的答

有没有一种方法可以从JRuby显式地将一个Java对象强制转换为另一个Java类

有时我希望能够调用
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)