java - 如何在 Java Nashorn 中声明类?

标签 java class nashorn

我知道我可以通过 Java.extend 扩展抽象类和接口(interface),但是如何在类中添加自定义方法、构造函数和字段?我试图喜欢这个,但它不起作用:

var MyClass = Java.extend(java.lang.Object, {
    myField1: java.lang.String,
    myField2: java.lang.Object,
    "<init>": function(arg1, arg2) {
        // Try to declare constructor
    },
    myMethod: function(arg1, arg2, arg3) {
        // Try to declare method
    }
});

最佳答案

正如 A. Sundararajan 正确指出的那样,您无法向扩展类添加新功能。但为什么?

我怀疑这是因为 Nashorn 实现使用 Java.extend() 创建的类的方式。如果您在脚本末尾添加语句 print(MyClass.class) ,您可以看到类的类型是“jdk.nashorn.javaadapters.java.lang.Object”,一个在 Nashorn 中定义的类,并且不太可能指定您在定义扩展类时添加的相同自定义。

因此(大概)在运行时,您添加的任何自定义(不包括覆盖)都不会被 Nashorn 所知。 Nashorn 文档暗示了这一限制,但据我所知并没有明确说明。请参阅this相关的 Stack Overflow 问题以获取更多信息。

关于java - 如何在 Java Nashorn 中声明类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235386/

相关文章:

java - 如何从 Struts 2 中的选定对象获取对象属性

java - 如何检查 ArrayList<ArrayList<String>> 是否包含某个 ArrayList<String>

C++从已经初始化的父类创建子类

Ruby 实例方法和变量

java - 准备 Nashorn 引擎的 Apache Commons 池的有效方法

java - 使用 HTTPHandler 上传文件

java - Nest 聚合搜索请求

javascript - 无法使用 JavaScript/jQuery 将特定的类名分配给 div 集合

java - 无缝地将数组和列表传入和传出 Nashorn

Nashorn 和脚本绑定(bind)范围