使用 varargs 参数调用重载方法时的 Nashorn 错误
假设以下 API:
package nashorn.test;
public class API {
public static void test(String string) {
throw new RuntimeException("Don't call this");
}
public static void test(Integer... args) {
System.out.println("OK");
}
}
以下 Nashorn JavaScript 代码段将失败:
var API = Java.type("nashorn.test.API");
API.test(1);
将调用第一个方法,而不是第二个方法。这是Nashorn引擎中的一个错误吗?
为了记录在案,此问题之前已在 jOOQ 用户组上报告过,其中大量使用方法重载和 varargs,并且此问题可能会导致很多麻烦。
关于拳击
有人可能会怀疑这可能与拳击有关。事实并非如此。当我这样做时,问题也出现了
public class API {
public static void test(String string) {
throw new RuntimeException("Don't call this");
}
public static void test(Integer... args) {
System.out.println("OK");
}
public static void test(MyType... args) {
System.out.println("OK");
}
}
和:
public class MyType {
}
然后:
var API = Java.type("nashorn.test.API");
var MyType = Java.type("nashorn.test.MyType");
API.test(new MyType());