Devolver una lista no modificable es una buena idea. Pero una lista que no se puede modificar durante la llamada al método getter puede ser cambiada por la clase o las clases derivadas de la clase.
En su lugar, debe dejar en claro a cualquiera que extienda la clase que la lista no debe modificarse.
Entonces, en su ejemplo, podría conducir al siguiente código:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
public static final List<String> STRINGS =
Collections.unmodifiableList(
Arrays.asList("1", "2"));
public final List<String> getStrings() {
return STRINGS;
}
}
En el ejemplo anterior, hice STRINGS
público el campo, en principio, podría eliminar la llamada al método, ya que los valores ya se conocen.
También puede asignar las cadenas a un private final List<String>
campo que no se puede modificar durante la construcción de la instancia de clase. El uso de argumentos constantes o de instanciación (del constructor) depende del diseño de la clase.
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
private final List<String> strings;
public Test(final String ... strings) {
this.strings = Collections.unmodifiableList(Arrays
.asList(strings));
}
public final List<String> getStrings() {
return strings;
}
}
final
hace evitar que la modificación del campo . Sin embargo, evitar la modificación de loObject
mencionado por un campo es más complicado.