Nashorn使用varargs错误地解析了Java方法签名

时间:2016-03-21 11:37:06

标签: java nashorn

在与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的预期行为?也许我做错了什么?或者这是一个错误?

0 个答案:

没有答案
相关问题