2

执行 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);
    }
}

内的 Ruby 代码Test.rb

someInstance = MyJavaClass.new("Joe")

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

4

1 回答 1

1

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

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

它使用 Java 反射来实例化MyJavaClass.

但是,这可以更简单地完成,而无需将类添加为 ruby​​ var。首先,确保文件夹的路径MyJavaClass位于类路径(或 ruby$LOAD_PATH​​ )上。然后,在 中按如下方式调用该类Test.rb

someInstance = Java::MyJavaClass.new("joe")

或者

 java_import 'MyJavaClass'
 someInstance = MyJavaClass.new("Joe")
于 2013-01-08T23:58:39.810 回答