gpt4 book ai didi

java nashorn 访问父类(super class)成员

转载 作者:行者123 更新时间:2023-11-30 10:59:50 24 4
gpt4 key购买 nike

我正在使用 nashorn 引擎,我正在尝试扩展以下 java 类

public abstract class AbstractClass {
protected String name;
protected long id;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void init() {

}

Javascript 代码:在方法 init() 中我想访问父类(super class)成员(直接设置 protected 字段的值或使用公共(public) setter )

var extended = Java.extend(AbstractClass.static , {
init: function() {
extended.name = "name"; //name is null
setName("name") //exception <eval>:6 ReferenceError: "setName" is not defined
}
});

在 java 中我创建对象实例并调用 init 方法,但是字段“name”为空。

我也试过使用 Java.super(extended ).setName("name");但这引发了异常 <eval>:7 TypeError: Cannot call undefined

我如何从 javascript 和 nashorn 访问父类(super class)成员?

最佳答案

Java.extend 创建一个子类而不是子类实例。但是 Java.super 需要一个子类实例作为参数。因此,以下脚本有效:

var extended = new (Java.extend(Java.type("AbstractClass"))) {
init: function() {
Java.super(extended).setName("foo");
}
};

extended.init();
print(extended.name);

此处是 Java.super 的更大示例用法

https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions#Nashornextensions-java_super

关于java nashorn 访问父类(super class)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com