【问题标题】:Java ScriptEngine - Create dynamic variables in java classJava ScriptEngine - 在 java 类中创建动态变量
【发布时间】:2013-09-26 14:53:16
【问题描述】:

我使用 java ScriptEngine 来执行一个可以改变共享 Java 类的脚本。我想知道,是否可以在 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

【问题讨论】:

    标签: java javascript-engine


    【解决方案1】:

    您可以使用ScriptEngine#put(String key, Object value) 方法在引擎中注册一个javascript变量。例如:

    engine.put("i", 10);
    

    这是如何检索已注册的变量:

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

    【讨论】:

      【解决方案2】:

      Java 不是动态语言。因此,您不能向该类/对象添加属性/变量。为此,您需要使用其他语言,例如 Groovy 或 Java Script。

      【讨论】:

      • 我用 groovy 尝试了相同的代码,但它也因相同的错误而失败(没有公共财产)。我使用了这篇文章stackoverflow.com/a/6569565/1228906,并且能够在脚本中动态创建属性,但在 ScriptEngine 中执行相同操作失败。不过谢谢!
      • 我假设您使用了“绑定”。您不能动态地将“属性”添加到“类”中。您只能定义动态全局变量。
      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2011-04-16
      • 2011-04-05
      • 2016-10-24
      • 1970-01-01
      • 2017-04-15
      • 2011-11-20
      • 2014-01-04
      相关资源
      最近更新 更多