有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

继承的静态方法在Java Nashorn中不可用

我有一个实用程序类,它将功能添加到更通用的实用程序类中。在Java中,一切都按预期工作,但Java的JavaScript引擎Nashorn中的行为是不同的

有关说明,请参见以下代码:

package com.test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Test {

    public static class A {
        public static void sayHello() {
            System.out.println("Hello World");
        }
    }

    public static class B extends A {
        public static void sayBye() {
            System.out.println("Goodbye cruel world");
        }
    }

    public static void main(String[] args) throws Exception {
        // Java's Behavior
        A.sayHello();    // Works
        B.sayBye();      // Works
        B.sayHello();    // Works

        // Java Nashorn's Behavior
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("nashorn");

        engine.eval("var A = Java.type('com.test.Test.A')");
        engine.eval("var B = Java.type('com.test.Test.B')");

        engine.eval("A.sayHello()");    // Works
        engine.eval("B.sayBye()");      // Works
        engine.eval("B.sayHello()");    // Fails
    }
}

有没有办法让B.sayHello()与Nashorn引擎一起工作


共 (1) 个答案

  1. # 1 楼答案

    是的,静态方法只能在方法的确切声明类(而不是它的子类)上调用。这是为了简化dynalink链接器(nashorn使用)而做出的设计选择