С неизменяемым объектом, где уместно обернуть содержащуюся коллекцию как неизменяемую? Я вижу 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; } }
Есть ли другие варианты и какой из них правильный?