如何实例化在Java中实现Java接口的JRuby类

时间:2014-09-12 08:01:59

标签: java jruby javax.script

有一个Java接口Job:

interface Job{
...
}

和实现它的JRuby类SimpleJob:

class SimpleJob
require org.quartz.Job
...
end

我需要(从Java类)使用SimpleJob类实例化javax.script.ScriptEngine类,并获取其类对象。我该怎么做?

2 个答案:

答案 0 :(得分:0)

我不确定你是否可以实现它。为什么你不创建一个你想要的脚本,然后使用SciptEngine来执行脚本?像这样

ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine rubyEngine = m.getEngineByName("jruby");
try {  
  FileReader f = new FileReader("yourscript.rb");
  engine.eval(f);
} catch (javax.script.ScriptException e) {
    ...
} 

另外看看这个,也许它会对你有所帮助 https://github.com/jruby/jruby/wiki/DirectJRubyEmbedding

答案 1 :(得分:0)

“最简单”的方式是做一个评估:

IRubyObject instance = (IRubyObject) rubyEngine.eval("SimpleJob.new");

访问该类并手动“调用”它:

RubyClass klass = (RubyClass) rubyEngine.eval("SimpleJob");
klass.callMethod("new");

注意:使用JRuby的“直接”API也可以实现相同的目标:

runtime.getClass("SimpleJob").callMethod("new");

假设您获得了org.jruby.Ruby 运行时实例