gente,Java - Clone la propiedad dentro de método getter
yo estaba pasando por mejores prácticas de codificación de Java mencionados aquí
http://viralpatel.net/blogs/most-useful-java-best-practice-quotes-java-developers/
segunda cita dice,
Cita 2: Nunca hacer una campos de instancia de clase pública
Estoy de acuerdo que es absolutamente correcto, pero me quedé atrapado por seguir la recomendación del escritor pocas líneas debajo de esta cita.
Dice,
private String[] weekdays =
{"Sun", "Mon", "Tue", "Thu", "Fri", "Sat", "Sun"};
public String[] getWeekdays() {
return weekdays;
}
Pero escribir método getter no resuelve nuestro problema exactamente. La matriz sigue siendo accesible. La mejor manera de hacerlo no modificable es devolver un clon de matriz en lugar de la matriz misma. Así, el método de obtención se cambiará a
public String[] getWeekdays() {
return weekdays.clone();
}
he utilizado nunca me clone()
dentro de cualquier método de obtención de la clase Java.
Me pregunto (como se menciona a ser una de las buenas prácticas) - por qué uno should use
/shouldn't use
clone()
dentro método getter? y en que escenarios?
¿Califica para ser una buena práctica de codificación para Java?
Gracias
IMO: para objetos inmutables y tipos de datos primitivos, no es necesario clonar. Para todo lo demás, si realmente queremos que nuestros datos estén seguros, debemos devolver la copia clonada y no la original. –
Puede devolver 'Arrays.asList (entre semana)', que será inmutable. – Jivings
@Jivings no es cierto. La Lista no aceptará nuevos elementos, pero los métodos set() funcionan. –