Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rhino在java中设置NativeObject属性_Java_Rhino - Fatal编程技术网

Rhino在java中设置NativeObject属性

Rhino在java中设置NativeObject属性,java,rhino,Java,Rhino,我有一个javascript脚本,它在计算时返回一个NativeObject obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null) 我抛出了一个java.lang.UnsupportedOperationException。是否有其他方法可以更改对象值?您应该调用NativeObject.put(String,Scriptable,object)版本,而不是从Map界面继承的

我有一个javascript脚本,它在计算时返回一个NativeObject

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

我抛出了一个java.lang.UnsupportedOperationException。是否有其他方法可以更改对象值?

您应该调用
NativeObject.put(String,Scriptable,object)
版本,而不是从
Map
界面继承的
put(String,object)

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;
            }
        });   
    }
}
公共类AddPropertyToObject{
公共静态void main(字符串[]args){
新建ContextFactory()。调用(新建ContextAction()){
@凌驾
公共对象运行(上下文ctx){
Scriptable scope=ctx.initStandardObjects();
试一试{
脚本实体=ctx.newObject(范围);
NativeObject结果=(NativeObject)ctx.EvaluateTestRing(
范围
“({年龄:3岁,姓名:'bob'})”,
“”,1,空);
结果。输入(“姓氏”,结果,“史密斯”);
对于(条目p:result.entrySet()){
System.out.println(p.getKey()+“:”+p.getValue());
}
}捕获(例外e){
e、 printStackTrace(System.err);
}
返回null;
}
});   
}
}

我知道问题出在哪里,put(key,value)方法不起作用,它需要put(key,scriptable,value)方法。是的,我没有注意到你使用了
Map
method:)
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;
            }
        });   
    }
}