2011-09-02 7 views
1

...継承されたメソッドを手動でオーバーライドできますか?非常に不完全なタイトルだ

public class A extends AbstractList 
{ 
    public boolean addAll(int index, Collection<E> what){} 
} 

が、Eclipseは

Name clash: The method addAll(int, Collection<E>) of type DynamicArray<E> has the same 
erasure as addAll(int, Collection<? extends E>) of type AbstractList<E> but does not 
override it 

私にコンパイルエラーを与える私は、消去に問題が何であるかを理解し、私は、なぜaddAll(int, Collection<E>) doesnのを理解していません継承されたメソッドをオーバーライドしません(両方が同じクラスに定義されていても、私はそれを見ることができますが、問題は: "メソッドが継承されたメソッドと同じ消去を持つ場合、継承されたメソッドをオーバーライドします。 1つは同じ消去があるので、動作しません ")。

コンパイラにをDynamicList.addAll(int, Collection<E>)で上書きさせる方法はありますか?

+4

閉じる私ができるようE.を拡張することはできませんと述べています(このルールは非常に難解ですが)、関数定義が元の関数へのアクセスを効果的にブロックするという苦情がありますが、元の関数へのすべての正当な呼び出しは受け付けられません。 –

答えて

1

あなたは上書きする方法とまったく同じシグネチャを与える必要があります。

public boolean addAll(int index, Collection<? extends E> what) 

DynamicList.addAll(int, Collection<E>)AbstractList.addAll(int, Collection<? extends E>)を上書きするコンパイラを強制する方法はありますか?

オーバーロードを考えている場合:いいえ消しゴムで2つの方法を区別できませんでした。したがって、1つしか存在できません。

オーバーライドを検討している場合:別のシグネチャを指定すると、オーバーライドされませんでしたか?あなたはコレクションのArrayListをシグネチャで狭めることもできませんでした。

1

具体的には、オリジナルのaddAll(int, Collection<? extends E>)は、ご使用のバージョンaddAll(int, Collection<E>)項目が正確にEであることを要求しながら、第二PARMは、Eを延長することができる項目の任意の集合とすることができ、彼らは

関連する問題