2013-09-26 33 views
0

我已經使用Java ScriptEngine執行腳本,該腳本可能會改變共享的Java類。我想知道,如果可以在java類中支持動態創建的變量?Java ScriptEngine - 在java類中創建動態變量

// create a script engine manager 
ScriptEngineManager factory = new ScriptEngineManager(); 

// create a JavaScript engine 
ScriptEngine engine = factory.getEngineByName("JavaScript"); 
engine.put("javaclass", jClass); 

engine.eval("javaclass.propertyThatDoesNotExist = 'test'"); // throws exception 

回答

0

可以註冊在發動機中的JavaScript變量,通過使用ScriptEngine#put(String key, Object value)方法。例如:

engine.put("i", 10); 

這是你如何可以獲取已註冊的變量:

int i = ((Double) engine.eval("i")).intValue(); 
System.out.println("JavaScript variable in Java; i = " + i); 
0

Java不是動態語言。所以你不能爲該類/對象添加一個屬性/變量。爲此,您需要使用Groovy或Java Script等其他語言。

+0

我嘗試了與groovy相同的代碼,它也出現了同樣的錯誤(沒有公共屬性)。我用這篇文章http://stackoverflow.com/a/6569565/1228906,我能夠在腳本中動態創建屬性,但在ScriptEngine中做同樣的操作失敗。雖然謝謝! – webber

+0

我假設你使用了「綁定」。你不會爲「類」動態添加「屬性」。您只能定義動態全局變量。 –