Rhino 在 Java 中设置 NativeObject 属性

J P*_*lar 2 java rhino

我有一个 javascript 脚本,它在评估时返回一个 NativeObject

obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null)
Run Code Online (Sandbox Code Playgroud)

然后我将 obj 转换为 NativeObject 或 Map,然后运行 ​​put 方法

castObj.put("surname","smith")
Run Code Online (Sandbox Code Playgroud)

我得到一个 java.lang.UnsupportedOperationException 抛出。还有另一种方法可以更改对象值吗?

Raf*_*ele 5

您应该调用NativeObject.put(String, Scriptable, Object)版本,而不是put(String, Object)Map接口继承的:

public class AddPropertyToObject {
    public static void main(String[] args) {
        new ContextFactory().call(new ContextAction(){

            @Override
            public Object run(Context ctx) {
                Scriptable scope = ctx.initStandardObjects();
                try {
                    Scriptable entity = ctx.newObject(scope);

                    NativeObject result = (NativeObject) ctx.evaluateString(
                        scope,
                        "({age:3, name:'bob'})",
                        "<inline>", 1, null);

                    result.put("surname", result, "Smith");

                    for (Entry<Object, Object> p : result.entrySet()) {
                        System.out.println(p.getKey() + ": " + p.getValue());
                    }

                } catch (Exception e) {
                    e.printStackTrace(System.err);
                }
                return null;
            }
        });   
    }
}
Run Code Online (Sandbox Code Playgroud)