执行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对象的方法它不起作用。

最佳答案

首先,请注意,通过将MyJavaClass.class作为一个ruby变量放置,jruby脚本可以使用可用的java类对象。以下工作:

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")

关于java - 如何从JRuby中ScriptingContainer执行的ruby脚本初始化Java对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14189641/

10-10 09:02