Опубликовать проблему, которую Raseed in graaljs Repo здесь
, чтобы получить информацию -> https://github.com/oracle/graaljs/issues/911образное. Установите соответствующий метод, основанный на количестве аргументов, передаваемых из JavaScript, в отличие от Nashorn. Функциональность работала без проблем в Нашорне, и, хотя мы понимаем, что у Graaljs могут быть разные цели в области конструкции в отношении соответствия JavaScript, это автоматическое разрешение нескольких функциональных интерфейсов было полезной функцией для совместимости Java-JavaScript. Текущее поведение требует явной обработки, которая добавляет сложность в кодовую базу < /p>
graaljs.version => 23.1.2
jdk версия - 21 < /p>
Пример кода ниже. < /P>
// Functional Interfaces
@FunctionalInterface
public interface OneArgFunction {
public String apply(String arg);
}
@FunctionalInterface
public interface TwoArgFunction {
public String apply(String arg1, Number arg2);
}
// Concrete class
public class MultiFunctionAdapter implements OneArgFunction, TwoArgFunction {
@Override
public String apply(String arg) {
return "Hello " + arg;
}
@Override
public String apply(String arg1, Number arg2) {
return "Hello " + arg1 + " " + arg2;
}
}
//Test class
public class MultipleInterfaceTest {
public static void main(String[] args) throws Exception {
Context context = Context.newBuilder("js")
.allowAllAccess(true)
.allowHostClassLookup(classname -> true)
.build();
context.getBindings("js").putMember("adapter", new MultiFunctionAdapter());
// One arg works fine as it is the first implemented interface in order
String jscript1 = "adapter('world')"; // works fine
Value result1 = context.eval("js", jscript1); // prints "Hello world"
System.out.println("Result: " + result1.asString());
//Below script throws TypeError: execute onMultiFunctionAdapter failed due to: Arity error - expected: 1 actual: 2
String jscript2 = "adapter('world', 60.5)";
Value result2 = context.eval("js", jscript2); // Arity error - expected: 1 actual: 2
System.out.println("Result: " + result2.asString());
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ke-nashorn