在与Nashorn合作时,我遇到了意想不到的行为。
Java类:
public class JavaClass {
public String method(String str, Integer i) {
return "Method a";
}
public String method(String... args) {
return "Method b";
}
}
JS脚本:
print(javaClass.method("str1", 2));
print(javaClass.method("str1", "str2"));
print(javaClass.method("str1", "str2", "str3"));
执行以下代码:
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);
它将返回以下输出:
Java call:
Method a
Method b
JS call:
Method a
Method a
Method b
JS第二个结果看起来不正确。我期望在Java中得到相同的结果但是方法A被调用而不是" str2"我们得到整数" 0" 。我们还可以看到,如果我们改变参数计数,方法调用就可以了。
nashorn的预期行为?也许我做错了什么?或者这是一个错误?