在 Nashorn 中使用重载方法实现 java 类型

Implement java type with overloaded methods in Nashorn

有没有办法在 Nashorn 中使用两种方法的单独代码来实现此接口?

public interface Test {
    void methodA(int a);
    long methodA(long b);
}

像这样的东西将实现这两​​种方法:

var x = new whatever.Test {
    methodA: function (a) {
        print(a + ", type: " + (typeof a)); // type is number, so I don't even know what method was actually called
    }
};

没有,没有。

由于 JavaScript 没有重载方法的概念,所有 Java 重载将共享相同的 JavaScript 函数。如果您需要不同的行为,则必须尝试根据参数的数量和类型来区分自己。如果你有

methodA(Object x) methodA(Object x, Object y)

你可以

function methodA(x, y)

你可以检测到,例如typeof(y) == "undefined" 然后 single-arg 版本被调用。或者,您可以在整个过程中使用 arguments 数组。

然而,在您的情况下,由于 JavaScript 只有一种数字类型而没有单独的整数类型,因此 int 和 long 都变成了数字(因此 float 和 double 以及 byte 和 short),所以没有除了可能测试值范围之外,真的有任何方法可以判断调用了哪个重载。