2013-09-26 124 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

我假设你使用了“绑定”。你不会为“类”动态添加“属性”。您只能定义动态全局变量。 –