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

时间:2018-04-07 20:44:17

标签: java 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
    }
};

1 个答案:

答案 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都会成为一个数字(因此会浮点数和双精度,字节和短数),所以实际上没有任何方法告诉我调用哪个重载除了测试值范围。

相关问题