3

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)

+2

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. –

Antwort

1

Sie die Java | Assignment issues | Assignment to Collection or array field from parameter Inspektion können auch Warnungen in Setter und Konstrukteure zu bekommen.

2

Ich glaube, das ist nur Standard-Programmierpraktiken zu fördern.

Die oben genannte Warnung würde den Entwickler zwingen, unveränderliche Sammlungen innerhalb einer Klasse zu haben.

Sie können diese Warnung ignorieren oder alternativ die Inspektion unterdrücken.

Sie können hier darüber lesen: https://www.jetbrains.com/help/idea/2016.2/suppressing-inspections.html