在Java中如何防止隐式转换的类型安全性?

在Java中如何防止隐式转换的类型安全性?,java,Java,假设方法如下所示: void foo(int i) { } 有没有办法使以下调用非法或生成异常 foo((short)3); 也许是这个 class AClass { void foo(int x) { /* do work */ } void foo(short x) { throw new IllegalArgumentException(); } } 这个解决方案可能不是您想要的,但我会使用函数重载创建一个版本的void foo(int),它像正常一样处理数据,另一个版本的签

假设方法如下所示:

void foo(int i)
{
}
有没有办法使以下调用非法或生成异常

foo((short)3);
也许是这个

class AClass {
  void foo(int x) { /* do work */ }
  void foo(short x) { throw new IllegalArgumentException(); }
}

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

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

void foo(short s) {
    throw new IllegalArgumentException("your message here");
}

Bruno的重载将起作用,但如果您正在考虑防止其他类型的强制转换,则始终可以将整数装箱到其对象类中:

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

这将阻止您向其发送短参数。

您可以检查发送到的参数类method@IwoKucharski,不,你不能。该方法接收一个基元类型。谢谢!实际上,在我看来,最初的问题是一个更一般的问题:如何使方法对任何隐式转换都具有类型安全性?如果你不需要担心有多少可能的隐式转换,那就太好了。有没有一种方法可以做到这一点?你是在专门讨论基本类型吗?或者是关于引用类型?基元类型。谢谢你指出了Farian回答的警告。关注的方法不经常使用(例如,不在循环或类似情况下)。+1很好!请记住这种方法的一个缺点:您将有不必要的装箱和拆箱,如果经常调用,这可能是一个问题。哇,尽管我给出了这个问题的答案,但我认为这个问题更巧妙。