Sky hat gesagt.:
Anonymous hat gesagt.:
Grundsätzlich würde ich folgendes gelten lassen: Wird ein Objekt/Array etc. intern, innerhalb der Klasse,
die es liefert, verwendet, dann immer eine Kopie oder einen ImmutableWrapper zurückgeben, sonst direkt
die Referenz des Originals. Ausnahmen wären Frameworks, wo solche Kopierereien aus Performancegründen
nicht akzeptabel sind. Es sollte dann aber ausführlich dokumentiert werden.
Kannst Du das auch begründen ?
Gerne. Interna einer Klasse sollte man nicht nach aussen transportieren, da alles was ausserhalb einer Klasse
geschieht, aus Sicht der Klasse nicht kontrollierbar ist. Gibst du eine Arrayreferenz zurück, kannst du dich nie
darauf verlassen, was mit den Inhalten geschieht. z.B. es wird ausserhalb der Klasse umsortiert, während du
intern, in der Klasse, davon ausgehst, dass die Arrayelemente aufsteigend sortiert sind. Man könnte fragen,
wer macht solchen Blödsinn? Fehlerquellen auszuschliessen gehört zum guten Programmierstill.
Alternative: Innerhalb der Klasse immer für korrekte Sortierung sorgen. Folge: Unnötige Sortierung, wenn
sich nichts geändert hat.
Beispiel aus Swing. DefaultTableModel und die Methode getDataVector() (OK, die ist protected). Jeder zweite
Anfänger macht den Fehler, dass er sich nicht an die "Spielregeln" des Models hält und bei Änderungen
die fire.... Methode nicht aufruft. Ich habe schon bei Codereviews so manche Swing-Akrobatik erlebt, wo
jemand das Model nach Änderungen immer wieder neu gesetzt hat, damit die Änderungen wirksam werden.