3

次の get メソッドがあります。

public List<PersonalMessage> getMessagesList() {
    List<PersonalMessage> newList = new ArrayList<PersonalMessage>();

    for(PersonalMessage pMessage : this.listMessages) {
        newList.add(pMessage.clone());
    }

    return newList;
}

また、実装を別のものに変更する必要がある場合は、ArrayList簡単に変更でき、戻り値にnewList依存する他のすべてのコードを変更するだけで済みます。getMessageList()

次に、この set メソッドがあります。

public void setMessagesList(ArrayList<PersonalMessage> listMessages) {
    this.listMessages = listMessages;
}

私の質問は、Listメソッド シグネチャで 'ArrayList の代わりに使用する必要がありますか?

このようにして、必要な実装を強制できるため、使用することにしましArrayListた。そうしないと、あちこちでさまざまな種類のリストが混乱する可能性があります。

でも、このままでいいのか不安…。

4

3 に答える 3

6

セッター メソッドは、基になる表現の抽象化を破っています。公開インターフェースで本当に必要ですか?

public void setMessagesList(Collection<PersonalMessage> messages) {
    this.listMessages = new ArrayList<PersonalMessage>(messages);
}
于 2010-05-22T23:03:58.780 に答える
2

一般的に、私はインターフェイス (List) を選びます。これは、この状況で ArrayList を使用するのが適切ではないと判断した場合でも、クライアント コードを壊さないことを意味します。

リストを使用する場合は、自分自身にも同意しています。ゲッターとセッターは同じ型です。

もう 1 つの潜在的な問題は、一部のリフレクション ユーティリティでは、ゲッターとセッターのペアが同じ型でない場合に認識されない可能性があることです。

于 2010-05-22T23:03:24.757 に答える
0

PersonalMessages の順序に依存しますか、それともコレクションでも十分でしょうか? なぜ特定の実装を強制したいのですか? Collection の Paramater 型、または Iterable でさえも十分です。

于 2010-05-22T23:03:33.913 に答える