que tienen esta clase:¿Cuál es la forma preferida de asignar una colección desde un parámetro?
public MyClass {
public void initialize(Collection<String> data) {
this.data = data; // <-- Bad!
}
private Collection<String> data;
}
Esto es, obviamente, mal estilo, porque yo estoy presentando un estado mutable compartido. ¿Cuál es la forma preferida de manejar esto?
- ¿Ignorarlo?
- ¿Clonar la colección?
- ...?
EDIT: para aclarar por qué esto es malo, imaginar esto:
MyClass myObject = new MyClass();
List<String> data = new ArrayList<String>();
myObject.initialize(data); // myObject.data.size() == 0
data.add("Test"); // myObject.data.size() == 1
Sólo almacenar la referencia plantea un modo de inyectar datos en el campo privado myObject.data
, aunque debería ser totalmente privado.
Dependiendo de la naturaleza de MyClass
, esto podría tener graves consecuencias.
¿Cuándo y cómo está cambiando el estado? ¿Tu clase necesita observar el cambio? –
@Jesse: se agregó un ejemplo a la pregunta. –