java nashorn访问超类成员

时间:2015-08-02 14:06:22

标签: java superclass nashorn

我正在使用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()中我想访问超类成员(直接设置受保护字段的值或使用公共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 i中创建对象实例并调用init方法,但字段“name”为null。

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

如何从javascript和nashorn访问超类成员?

1 个答案:

答案 0 :(得分:1)

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