我有一个 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 抛出。还有另一种方法可以更改对象值吗?
您应该调用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)
| 归档时间: |
|
| 查看次数: |
3089 次 |
| 最近记录: |