假设方法如下:
void foo(int i)
{
}
有没有办法让以下调用非法或产生异常?
foo((short)3);
答案 0 :(得分:9)
也许这个?
class AClass {
void foo(int x) { /* do work */ }
void foo(short x) { throw new IllegalArgumentException(); }
}
答案 1 :(得分:4)
Bruno的重载将起作用,但如果您正在考虑阻止其他类型的转换,您始终可以将整数打包到其Object类中:
void foo(Integer i) {
// handle data normally
}
这将阻止您向其发送短参数。
答案 2 :(得分:3)
这个解决方案可能不是你想要的,但是我会使用函数重载来创建一个void foo(int)
版本,它处理正常的数据,另一个版本带有签名处理数据的void foo(short)
就像是一个错误。例如:
void foo(int i) {
// handle data normally
}
void foo(short s) {
throw new IllegalArgumentException("your message here");
}