Es ist eine gute Idee, eine nicht veränderbare Liste zurückzugeben. Eine Liste, die während des Aufrufs der Getter-Methode nicht geändert werden kann, kann jedoch weiterhin von der Klasse oder von Klassen, die von der Klasse abgeleitet sind, geändert werden.
Stattdessen sollten Sie jedem, der die Klasse erweitert, klar machen, dass die Liste nicht geändert werden sollte.
In Ihrem Beispiel könnte dies zu folgendem Code führen:
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;
}
}
Im obigen Beispiel habe ich das STRINGS
Feld öffentlich gemacht. Im Prinzip können Sie den Methodenaufruf abschaffen, da die Werte bereits bekannt sind.
Sie können die Zeichenfolgen auch einem private final List<String>
Feld zuweisen, das während der Erstellung der Klasseninstanz nicht geändert werden kann. Die Verwendung einer Konstante oder von Instanziierungsargumenten (des Konstruktors) hängt vom Design der Klasse ab.
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
funktioniert die Änderung des Feldes verhindern . Das Verhindern der Modifikation desObject
durch ein Feld genannten ist jedoch komplizierter.