2013-01-07 24 views
2

Java代碼執行Ruby腳本:如何初始化JRuby中由ScriptingContainer執行的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") 

這就是我試圖初始化中的一個Java對象Ruby腳本使用JRuby。它不起作用。

回答

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中按如下方式致電課程。

​​

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