2017-04-21 8 views
2

私はこのようなリストオブジェクトを持つクラスを持っている:Javaでリストオブジェクトのセッターを提供する必要がありますか?

import java.util.ArrayList; 
import java.util.List; 

public class MyClass 
{ 
    private List<String> myList; 

    //??? 
} 

、他のクラスのリストにアクセスできるように、私は次のいずれかを追加する必要があります:

  • ゲッターとセッター

  • またはゲッターとセッターと空のArrayList

  • とコンストラクタにリストを初期化します
  • またはコンストラクタ引数の両方のコンストラクタ

  • または

  • またはゲッターとセッターに渡されたリストとゲッターとセッターとコンストラクタでリストを初期化しますGetterのみを返し、コンストラクタのリストを空のArrayListで初期化する

  • または getterとin行うための最善のことは何の両方のコンストラクタを持つ唯一のゲッター

コンストラクタ引数

  • またはに渡されたリストに、コンストラクタでリストをitialize?慣習はありますか?

    EDIT:ことで、私は他のクラスがリスト、店と連携し、その中にオブジェクトを読み取るせ、具体的な何も、単に一般的な使用方法を意味しない「させる他のクラスは、リストにアクセスします」。

  • +0

    「他のクラスにリストにアクセスさせる」必要性と必要性​​に応じて最適なことは明らかではありません。より具体的にしてください。 – davidxxx

    答えて

    1

    クラスからのリストフィールドが別のクラスに「提供」されるようにする単一の方法や規則はありません。

    私は他のクラスがリスト、店舗 と連携し、その中にオブジェクトを読み取るせ、具体的なもの、 ちょうど一般的な使用方法を意味しない「させる他のクラスは、リストにアクセスします」。保護された方法で

    あなたが別のクラスにクラスからListフィールドに関する情報を提供するために、大きく二つの方法があります。 2つのクラスは非常に結合されていないように設計されているだけでなく、Listを含むクラスからListに追加されたデータを保護したいと考えています。
    Listにgetterとsetterを用意するのではなく、リスト内のデータを読み込んで追加するパブリックメソッドを提供することができます。
    このようにして、クライアントクラスは、使用されているクラスの実装から結合されたままではありません。リストが使用され、リストの責任を負うことはありません(追加/取得/移動、それらのために)その所有者です。
    リストは、リストのgetterを提供しているアクセスするが、変更不可能として、それを提供することにより、別の方法:カップリング方法で

    public List<YourClass> getReadonlyList(){ return Collections.unmodifiableList(originalList); }

  • 。 2つのクラスは非常に結合されているように設計されています。したがって、リストのゲッターとセッターを提供することは問題ではありません。それは無用な複雑さを導入することを避けるので非常に適しているかもしれません。

  • 1

    データ隠蔽とカプセル化は常に良い原則です

    これは特定のアーキテクチャせずに決めるのは難しいの一種であり、多くのツールは、多くのと一緒に暮らすことができることなしに死んでしまう...

    あなたは優しくすることができ私たちのクラスを使用している開発者には、セッターを使用して、あなたのリストのそれらの変更不可能なコレクションを与えることができます。

    これは、MyClassのインスタンスを作成した後にソフト開発者がリストを処理する必要があるかどうかによって決まります。

    +1

    たぶん速すぎる。あなたの答えは詳細なコメントのように見えるが、とにかく良い。 – davidxxx

    関連する問題