メソッドが次のようになっているとします。
void foo(int i)
{
}
次の呼び出しを違法にする方法や例外を生成する方法はありますか?
foo((short)3);
多分これ?
class AClass {
void foo(int x) { /* do work */ }
void foo(short x) { throw new IllegalArgumentException(); }
}
Brunoのオーバーロードは機能しますが、他のタイプのキャストを防ぐことを検討している場合は、いつでも整数をそのObjectクラスにボックス化できます。
void foo(Integer i) {
// handle data normally
}
これにより、短い引数を送信できなくなります。
この解決策はあなたが探しているものではないかもしれませんが、関数のオーバーロードを使用しvoid foo(int)
て、通常のようにデータを処理するのバージョンと、エラーのようにデータを処理する署名void foo(short)
を持つ別のバージョンを作成します。例えば:
void foo(int i) {
// handle data normally
}
void foo(short s) {
throw new IllegalArgumentException("your message here");
}