java 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()中,我想访问超类成员(直接设置受保护字段的值或使用公共设置器)

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方法,但字段“名称”为null。

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

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

A.孙达拉然

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java类成员的访问级别

子类java中的“重写”超类成员

Java,IllegalAccessorError:超类访问检查失败

Scala访问继承了Java类的静态成员

JAVA:如何访问每个类的成员?

访问超类的成员函数

如何从Java中的嵌套类访问父类成员?

在 kotlin 中访问父 Java 类的(静态类)成员

Nashorn访问Java对象的方法

来自 Java 超类构造函数访问的 Kotlin 构造函数

如何在Java中访问TreeSelectionListener的超类?

Java:对超类对象的子类的受保护的访问限制

如何使用Java访问私有类成员?

如何从ColdFusion访问Java类的公共静态成员?

无法从 kotlin 外部继承的 Java 类访问成员

在 Java 中访问对象的字段值 - 无法访问类 java.lang.IllegalAccessException 的成员

Scala类中的公共类成员在Java类中不可访问

Java对象超类

Java的:实现默认的超类,将设置成员的所有子类

如何使用私有成员 Java 创建带有子类的工作超类

Java - 无法访问由嵌套类扩展的超类的受保护方法

java-子类的访问变量(给定超类)来自另一个类

类成员-Java与Python

java-使用基类实例在派生类中访问的受保护成员

如何在kotlin中定义类,成员可以在java派生类中访问

在Java嵌套类中,封闭类可以访问内部类的私有成员吗?

如何从子类访问java中超类的受保护字段?

您可以通过Java中的超类访问子类变量吗

Java:具有访问超类的字段和方法的策略模式?