0

有一个Java接口Job:

interface Job{
...
}

和一个实现它的 JRuby 类 SimpleJob:

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

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

4

2 回答 2

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

于 2014-09-12T08:18:07.193 回答
0

“最简单”的方法是进行 eval :

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

于 2014-09-12T09:24:47.903 回答