Java 主机对象上的set方法
我期待输出Java 主机对象上的set方法,java,java-11,graalvm,Java,Java 11,Graalvm,我期待输出hi,但我没有得到输出 我想知道javascript(context.eval部分)是否没有更新我提供的主机对象(newthing()) putMember(“this”,new Thing())不会修改全局this,而是将名为this的属性放在全局对象中,可通过this访问。this。 “我该如何设置全球范围”的答案恐怕是:你不能 无法将对象方法分配给主机(即Java)。但是,您可以使用JS对象实现Java接口,例如,您可以执行以下操作: 公共接口的东西{ 无效运行(); } Con
hi
,但我没有得到输出
我想知道javascript(
context.eval
部分)是否没有更新我提供的主机对象(newthing()
)
putMember(“this”,new Thing())
不会修改全局this
,而是将名为this
的属性放在全局对象中,可通过this访问。this
。
“我该如何设置全球范围”的答案恐怕是:你不能公共接口的东西{
无效运行();
}
Context=Context.create(“js”);
值jsobj=context.eval(“js”,即“({run:()=>console.log('hi')}”);
Thing javaobj=jsobj.as(Thing.class);
javaobj.run();
这里有两个问题:
putMember(“this”,new Thing())
不会修改全局this
,而是将名为this
的属性放在全局对象中,可通过this访问。this
。
“我该如何设置全球范围”的答案恐怕是:你不能公共接口的东西{
无效运行();
}
Context=Context.create(“js”);
值jsobj=context.eval(“js”,即“({run:()=>console.log('hi')}”);
Thing javaobj=jsobj.as(Thing.class);
javaobj.run();
你确定“this”
不是Java中的保留变量名吗?@Robert它很特别是的。那么如何设置全局this
呢?你确定this“
不像Java中那样是一个保留变量名吗?@Robert它很特别是的。那么如何设置全局this
呢?您知道如何对抽象类而不是接口进行同样的设置吗?您知道如何对抽象类而不是接口执行同样的操作吗?
public class Thing {
public Thing() {
}
public void run() {
}
public void out(String s) {
System.out.println(s);
}
}
Context context = Context.create("js");
Value jsBindings = context.getBindings("js");
jsBindings.putMember("this", new Thing());
context.eval("js", "this.run = () => this.out('hi');");
jsBindings.getMember("this").getMember("run").execute();
context.close();