Предположим, что следующий 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());