IntelliJ warnt mich über "Return of Sammlung Feld" wenn ich etwas tun wieRückkehr der Warnung Sammlung Feld - Setters und Konstrukteurs
private List<String> myList;
public List<String> getMyList() {
return myList;
}
Die Beschreibung der Code-Inspektion heißt es:
Berichte Jeder Versuch, ein Array oder Collection-Feld von einer Methode zurückzugeben. Da der Inhalt des Arrays oder der Collection möglicherweise von der aufrufenden Methode geändert wird, kann dieses Konstrukt dazu führen, dass ein Objekt unerwartet geändert wird. Obwohl dieses Konstrukt gelegentlich aus Leistungsgründen nützlich ist, ist es inhärent fehleranfällig.
Ich verstehe völlig die Probleme aber ich frage mich, warum ich nicht über das Tun das gleiche für Einrichter und Konstrukteure gewarnt
public MyListClass (List<String> myList) {
this.myList = myList;
}
public void setMyList (List<String> myList) {
this.myList = myList;
}
die ich denke, zu den gleichen Problemen führen kann.
Soll ich keine neuen Collections sowohl für das Abrufen als auch für das Festlegen der Collection erstellen? Also nicht nur
return new ArrayList<String>(this.myList);
aber auch
this.myList = new ArrayList<String>(myList);
(Ignorieren macht zurückgegeben Listen unmodifiable oder Überprüfung auf null in diesem Beispiel)
Ein Setter * explizit * akzeptiert Daten, die außerhalb der Klasse erstellt wurden. Ein Getter * kann unangemessen interne Abhängigkeiten offen legen. Aber ja, es kann zu der gleichen Art von Problem führen. –