10

サブクラスをジェネリックに保ちたいのですが、変更したいadd(Object)のは ArrayList のメソッドだけで、呼び出し時に何も追加されないようにしますarrayList.add(null)(ArrayList の通常の実装ではnull; 何もしないでください)。

4

4 に答える 4

14

この場合、要素を追加/変更する ArrayList のメソッドの 1 つをオーバーライドするのを忘れた場合 (たとえば、set をオーバーライドするのを忘れる可能性があります)、null 要素を持つ可能性があるため、継承よりも構成を優先する必要があります。 .

しかし、質問は ArrayList をサブクラス化する方法に関するものだったので、次のようにします。

import java.util.ArrayList;

public class MyArrayList<T> extends ArrayList<T> {
    public boolean add(T element) {
        if (element != null) return super.add(element);
        return false;
    }
}
于 2012-05-06T23:20:03.310 に答える
10

これは、継承よりも構成を優先する必要がある例です。

を拡張する代わりに、メンバー フィールドを持ち、正しいことを行うメソッドを公開ArrayListするクラスを作成する必要があります。ArrayListadd

有効な Javaをお読みください。この問題を具体的に説明する例を次に示します。

于 2012-05-06T23:11:33.900 に答える
0

add メソッドが呼び出される場所にフィルターを実装することを検討しましたか? コード内の 1 か所だけから呼び出されている場合は、それが最も簡単な場合があります。単純な if ステートメントが機能する場合があります。

if (input/object != null) { 
    arrayList.add(input/object);
} 
else { 
    //do something else instead, or nothing
}
于 2014-09-05T06:44:32.003 に答える