I faced unexpected behavior while working with Nashorn.
Java class:
public class JavaClass {
public String method(String str, Integer i) {
return "Method a";
}
public String method(String... args) {
return "Method b";
}
}
JS script:
print(javaClass.method("str1", 2));
print(javaClass.method("str1", "str2"));
print(javaClass.method("str1", "str2", "str3"));
Execute following code:
JavaClass javaClass = new JavaClass();
System.out.println("Java call:");
System.out.println(javaClass.method("str1", 2));
System.out.println(javaClass.method("str1", "str2"));
System.out.println("JS call:");
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("nashorn");
engine.put("javaClass", javaClass);
engine.eval(script);
It will return following output:
Java call:
Method a
Method b
JS call:
Method a
Method a
Method b
JS second result looks incorrectly. I expect same result as in Java but method A gets called and instead of "str2" we get integer "0" . Also we can see that method call works fine if we change argument count.
Is it expected behavior of nashorn? Maybe I do something wrong? Or is it a bug?