继承的静态方法在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 楼答案
是的,静态方法只能在方法的确切声明类(而不是它的子类)上调用。这是为了简化dynalink链接器(nashorn使用)而做出的设计选择