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 に答える