0

特定のオブジェクトEXに対してオーバーロードするための非ジェネリックメソッドがいくつかあります。

protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}

私は次のような1つのメソッドを書きたい

protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}

そして、このメソッドから非ジェネリックメソッドを呼び出すことができます(instanceof演算子を使用せずに;))

4

2 に答える 2

1

いいえ、コンパイル時エラーになります。

タイプのメソッドinternalAdd(IP4BlockObject)は、引数(T)には適用できません。

あなたのタイプのメソッドのため:

protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}

そして、protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}あなたはtTのタイプとして取得します。だからあなたが呼ぶなら:

internalAdd(t);

これは、またはinternalAdd()を期待するだけなので、コンパイル時エラーが発生します。IP4BlockObjectIP4NetworkObject

注:これらすべてのメソッドが同じクラスにinternalAdd(t);ある場合は、ジェネリックメソッドが再度呼び出されるため、無限ループになります。

于 2013-03-15T12:23:19.027 に答える
0

私は仮定IP4BlockObjectしてIP4NetworkObject拡張AbstractEntityObjectし、抽象参照を使用していくつかのオーバーロードされたメソッド間でディスパッチしたいですか?私はそうです、私はこれにジェネリックメソッドを使用する目的を本当に理解していません。このメソッドをそのように宣言してみませんか。

boolean internalAdd(AbstractEntityObject object) {}

次に、特定のオブジェクトに必要なメソッドを選択する必要があります。instance of演算子、または派生クラスのタイプを与えるポリモーフィックメソッドを使用せずにこれを行う簡単な方法はありません。としてenum

これから逃げ出したい場合は、コードを書き直して、派生クラスが何らかのインターフェイスでポリモーフィックメソッドを呼び出すことにより、目的のメソッドを自分で選択できるようにすることができます。しかし、それは本当に価値がありますか?

于 2013-03-15T12:46:12.807 に答える