如何在Java中保护类型安全免受隐式转换?

时间:2013-03-14 18:48:34

标签: java

假设方法如下:

void foo(int i)
{
}

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

foo((short)3);

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");
}