执行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/