我想在Java中定义一个超类,然后定义在Ruby的子类,则使Java中子类的实例。 有一点是这样的:
// Java superclass
package myPkg;
public class Sup{
public Sup(){}
public abstract void foo(String a);
}
-
# Ruby code
include Java
require 'jruby/core_ext'
include_class 'myPkg.Sup'
class RubySub < Java::myPkg.Sup
def foo( a )
puts a;
end
end
RubySub.become_java!
RubySub
-
// Back in Java land
Ruby runtime = Ruby.newInstance();
IRubyObect ro = runtime.evalScriptlet(theRubyCodeAbove);
Class<Sup> clz = (Class<Sup>) JavaEmbedUtils.rubyToJava(runtime, ro, Class.class);
clz.newInstance().foo("Hey!");
我已经尝试了上面的代码,但我从一个InstantiationException newInstance()
调用。 我想有在运行时在Ruby中声明的类,所以如运行jrubyc编译Ruby代码可以提前一个Java类定义了。 我在做什么错在这里?
我已经通过在调试器底部的代码段运行,我肯定让从返回的RubyClass对象evalScriptlet()
调用。 也许有涉及到把一个额外的步骤RubyClass
成Class
?
更新:我有一个铅 -显然become_java!
如果类是一个Java类的子类不起作用。 有另一种方法,我可以做到这一点,还是我只是去骨?