在 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),所以没有除了可能测试值范围之外,真的有任何方法可以判断调用了哪个重载。
有没有办法在 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),所以没有除了可能测试值范围之外,真的有任何方法可以判断调用了哪个重载。