Retornar uma lista não modificável é uma boa idéia. Mas uma lista que não é modificável durante a chamada para o método getter ainda pode ser alterada pela classe ou classes derivadas da classe.
Em vez disso, você deve deixar claro para quem estende a classe que a lista não deve ser modificada.
Portanto, no seu exemplo, isso pode levar ao seguinte 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;
}
}
No exemplo acima, tornei o STRINGS
campo público. Em princípio, você pode acabar com a chamada do método, pois os valores já são conhecidos.
Você também pode atribuir as strings a um private final List<String>
campo que não pode ser modificado durante a construção da instância da classe. O uso de argumentos constantes ou de instanciação (do construtor) depende do design da classe.
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
faz evitar a modificação do campo . No entanto, impedir a modificação doObject
referido por um campo é mais complicado.