对于不可变对象,将包含的集合包装为不可修改的合适位置在哪里?我看到 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; } }
还有其他选择吗?哪一个合适?