有没有办法在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
}
};
答案 0 :(得分:2)
不,没有。
由于JavaScript没有重载方法的概念,因此所有Java重载都将共享相同的JavaScript函数。如果您需要不同的行为,您必须根据参数的数量和类型尝试区分自己。如果你有
methodA(Object x)
methodA(Object x, Object y)
你可以
function methodA(x, y)
你可以检测到,例如typeof(y) == "undefined"
然后调用单arg版本。或者,您可以始终使用arguments
数组。
但是,在你的情况下,由于JavaScript只有一个数字类型而没有单独的整数类型,int和long都会成为一个数字(因此会浮点数和双精度,字节和短数),所以实际上没有任何方法告诉我调用哪个重载除了测试值范围。