Java Setter?

4 Antworten

Ja, wenn du verhindern willst, dass das Attribut nachträglich verändert werden kann, dann lass den Setter weg (und mach das Attribut am besten objektintern auch gleich final). Ein Setter bei unveränderlichen Attributen macht tatächlich wenig Sinn.

Nein! Du willst verhindern, dass der Wert von außen manipuliert wird, ohne dass eine Schnittstelle dafür existiert, un Seiteneffekte zu verhindern. Außerdem soll versteckt werden, was die Setter genau macht. Der Schnittstellenbenutzer soll nichts darüber wissen bzw. sich keine Gedanken darüber machen.

Die Idee in der OOP ist, dass Objekte nur mittels Methodenaufrufen kommunizieren. Es sollte also niemals ein Objekt ein Feld eines anderen Objektes einfach so lesen oder schreiben können. Deswegen versteckt man das hinter einer Methode.

Woher ich das weiß:Studium / Ausbildung – B.Sc. Computer Science

Man will das nicht verhindern, sondern kapseln. Das Attribut soll nur an einer zentralen Stelle direkt geändert werden können.

Woher ich das weiß:Berufserfahrung – Java-Entwickler von Batch- und Webanwendungen

SikerimAMK31  01.11.2024, 10:51

Falsch. Es ist ein üblicher und in der Praxis sogar recht häufiger Fall, dass Objekte einzelne (oder gar alle, Stichwort Value Object) Attribute haben die bei der Erzeugung des Objekts genau einmal gesetzt werden und für den Rest der Lebenszeit des Objekts unverändert bleiben, und bei denen nachträgliche Änderungen komplett unerwünscht wären.

Sowas sollte man als beruflicher "Java-Entwickler von Batch- und Webanwendungen" eigentlich wissen ...

ZaoDaDong  01.11.2024, 10:52
@SikerimAMK31

Was hat das jetzt mit der konkreten Frage zu tun? Darum wurden also Setter entworfen, damit man manchal Attribute nur final setzt. Interessanter Einwand.

SikerimAMK31  01.11.2024, 11:04
@ZaoDaDong
Was hat das jetzt mit der konkreten Frage zu tun? 

Es ist eine konkrete Antwort darauf, was sonst?

Darum wurden also Setter entworfen, damit man manchal Attribute nur final setzt. Interessanter Einwand.

Nein, bei von vornherein als unveränderlich entworfenen Attributen brauchst du schlichtweg keinen Setter. Setter machen (wie der Name ja schon impliziert) nur SInn für Attribute die man nachträglich setzen kann/will. Und der Sonderfall "Basisklasse definiert einen Setter, aber die abgeleitete Klasse soll setzen verhindern" stand hier (noch) nicht im Raum, nur vorsorglich, falls du jetzt mit sowas ankommst.

ZaoDaDong  01.11.2024, 11:05
@SikerimAMK31

ich habe nie behauptet, dass man zwingend Setter benötigt. Dir scheint es an Leseverständnis zu mangeln.

SikerimAMK31  01.11.2024, 11:12
@ZaoDaDong

Nein, ich war lediglich auf deinen Strohmann

Darum wurden also Setter entworfen, damit man manchal Attribute nur final setzt. Interessanter Einwand.

eingegangen, was sich mal wieder als Fehler herausgestellt hat, da es dir scheinbar eh nicht um eine sachliche Diskussion geht. Geh am besten weiter spielen, und überlasse sowas lieber Leuten die tatsächlich ihr Geld damit verdienen, und das nicht nur in ihr Profil hier schreiben ;)