Неизменные предметы и неизменяемые коллекции
С неизменным объектом, где уместно обернуть содержащуюся коллекцию как неизменяемую? Я вижу 3 варианта:
In the immutable object's factory:
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");
}
}
In the immutable's contructor
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;
}
}
In the immutable's accessor (if applicable).
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;
}
}
Есть ли другие варианты, и какой из них подходит?