4

假设一个方法如下:

void foo(int i)
{
}

有没有办法使以下调用非法或产生异常?

foo((short)3);
4

3 回答 3

9

也许这个?

class AClass {
  void foo(int x) { /* do work */ }
  void foo(short x) { throw new IllegalArgumentException(); }
}
于 2013-03-14T18:50:25.123 回答
4

Bruno 的重载将起作用,但如果您正在考虑防止其他类型的转换,您总是可以将整数装箱到它的 Object 类中:

void foo(Integer i) {
    // handle data normally
}

这将阻止您向它发送简短的参数。

于 2013-03-14T18:54:52.853 回答
3

此解决方案可能不是您正在寻找的,但我会使用函数重载来创建一个版本void foo(int),它像正常一样处理数据,另一个版本的签名void foo(short)像处理数据一样是错误的。例如:

void foo(int i) {
    // handle data normally
}

void foo(short s) {
    throw new IllegalArgumentException("your message here");
}
于 2013-03-14T18:52:27.630 回答