如何从JRuby中的ScriptingContainer执行的ruby脚本初始化Java对象?

时间:2013-01-07 03:52:59

标签: java ruby jruby

执行Ruby脚本的Java代码:

ruby = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);
ruby.put("MyJavaClass", MyJavaClass.class);
ruby.runScriptlet(readFile("Test.rb"));

MyJavaClass代码:

public class MyJavaClass {
    public MyJavaClass(String name) {
        System.out.println("I got a name: " + name);
    }
}

Test.rb中的Ruby代码:

someInstance = MyJavaClass.new("Joe")

这是我尝试使用JRuby初始化Ruby脚本中的Java对象。它不起作用。

1 个答案:

答案 0 :(得分:1)

首先,请注意,通过将MyJavaClass.class作为ruby变量,可用的Java Class对象可用于JRuby脚本。以下作品:

java_class = MyJavaClass.getDeclaredConstructor(java.lang.String.java_class)
someInstance = java_class.new_instance("Joe")

它使用Java反射来实例化MyJavaClass

但是,这可以更简单地完成,而无需将类添加为ruby var。首先,确保MyJavaClass文件夹的路径位于类路径(or ruby $LOAD_PATH)上。然后,在Test.rb

中按如下方式调用该类
someInstance = Java::MyJavaClass.new("joe")

 java_import 'MyJavaClass'
 someInstance = MyJavaClass.new("Joe")