クラスにプライベートメンバーのリストがあります。ゲッターとセッターを使用して値を取得および設定しました。 SOnarはエラーをスローします-可変メンバーは直接保存または返すべきではありません。
たとえば、ABCとDEFは2つのクラスです。
class ABC{
private List<DEF> defList;
public List<DEF> getDefList() { return defList; }
public void setDefList(List<DEF> defList) { this.defList = defList; }
多くのグーグル検索を行った結果、ゲッターを次のように変更できることがわかりました。
public List<DEF> getDefList() { return new ArrayList<>(defList); }
同様にセッターを使用しようとすると、
public void setDefList(List<DEF> defList) { this.defList.addAll(defList); }
その後、変数が表示され始めます
'private field 'defList' is never assigned.
リスト(別のクラスのリスト)の場合の正しい方法を教えてください
注:Prasad KarunagodaとLeo Asoからの回答はどちらも機能します。両方を承認済みの回答としてマークできません。ここにメモがあります
ゲッターから返されるList
に追加の制限(不変性)を追加しない方が良いと思います。これを行うと、たとえばList
を使用するクライアントは、それをソートできなくなります。
だから、私の推奨するアプローチはこれです:
public class ABC {
private List<DEF> defList = new ArrayList<>();
public List<DEF> getDefList() {
return new ArrayList<>(defList);
}
public void setDefList(List<DEF> defList) {
if (defList == null)
throw new IllegalArgumentException("Parameter defList is null");
this.defList.clear();
this.defList.addAll(defList);
}
}
設計の観点から、ABC
クラスのさらに優れたAPIは次のようになります。
public List<DEF> getDefList()
public void clearDefList()
public void addAllDefs(List<DEF> defs) // Or method name appendDefs