如何实例化一个用Java实现Java接口的JRuby类



有一个Java接口作业:

interface Job{
...
}

以及实现它的JRuby类SimpleJob:

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

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

"最简单"的方法是进行评估:

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运行时实例

我不确定你是否能安装它。为什么你不创建一个你想要的脚本,然后使用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

相关内容

  • 没有找到相关文章

最新更新