不変オブジェクトの場合、含まれているコレクションを変更不可能としてラップするのはどこが適切ですか?3つのオプションがあります。
不変オブジェクトのファクトリでは:
public class ImmutableFactory { public Immutable build(){ List<Integer> values = new ArrayList<Integer>(); values.add(1); values.add(2); values.add(3); return new Immutable(Collections.unmodifiableList(values), "hello"); } }
不変のコンストラクターで
public class Immutable { private final List<Integer> values; private final String hello; public Immutable(List<Integer> values, String hello) { this.values = Collections.unmodifiableList(values); this.hello = hello; } public List<Integer> getValues() { return values; } public String getHello() { return hello; } }
不変のアクセサー(該当する場合)。
public class Immutable { private final List<Integer> values; private final String hello; public Immutable(List<Integer> values, String hello) { this.values = values; this.hello = hello; } public List<Integer> getValues() { return Collections.unmodifiableList(values); } public String getHello() { return hello; } }
他にオプションはありますか?どれが適切ですか?