有一个Java接口Job:
interface Job{
...
}
和一个实现它的 JRuby 类 SimpleJob:
class SimpleJob
require org.quartz.Job
...
end
我需要(从 Java 类)SimpleJob
使用该类实例化javax.script.ScriptEngine
该类,并获取其类对象。我该怎么做呢?
有一个Java接口Job:
interface Job{
...
}
和一个实现它的 JRuby 类 SimpleJob:
class SimpleJob
require org.quartz.Job
...
end
我需要(从 Java 类)SimpleJob
使用该类实例化javax.script.ScriptEngine
该类,并获取其类对象。我该怎么做呢?
我不确定你是否可以恢复它。为什么你不创建一个你想要的脚本然后使用 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
“最简单”的方法是进行 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
运行时实例