【问题标题】:How can I instantiate a JRuby class that implements a Java interface in Java如何实例化在 Java 中实现 Java 接口的 JRuby 类
【发布时间】:2014-09-12 08:01:59
【问题描述】:

有一个Java接口Job:

interface Job{
...
}

以及实现它的 JRuby 类 SimpleJob:

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

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

【问题讨论】:

    标签: java jruby javax.script


    【解决方案1】:

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

    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 runtime实例

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-25
        • 2014-08-18
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多