假设以下 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 用户组上报告过,其中方法重载和可变参数被大量使用,并且这个问题可能会导致很多麻烦。
关于拳击
可能有人怀疑这可能与拳击有关。它没有。当我这样做时也会出现问题
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());