Dies hängt in hohem Maße von dem Vertrag ab, den Sie mit Ihrer get () - Methode durchsetzen möchten. Gemäß den Design-by-Contract-Konventionen muss der Anrufer sicherstellen, dass die Voraussetzungen erfüllt sind (was bedeutet, dass eine Validierung in einer Setter-Methode häufig ein schlechtes Design ist) und der Angerufene (ich weiß nicht, ob dies der richtige englische Begriff für ist) das, dh der Angerufene) stellt sicher, dass die Post-Bedingungen erfüllt sind.
Wenn Sie Ihren Vertrag so definieren, dass die Methode get () - das Objekt nicht ändern darf, brechen Sie Ihren eigenen Vertrag. Denken Sie darüber nach, eine Methode wie zu implementieren
public isValid() {
return (this.myvalue == null || this.myvalue.isEmpty());
}
Der Vorteil dieses Ansatzes besteht darin, dass Sie nicht überprüfen müssen, ob die Rückgabe von get () "N / A" oder etwas anderes ist. Dies kann auch vor dem Aufruf von set () aufgerufen werden, um zu überprüfen, ob Sie keine unzulässigen Werte in Ihr Objekt einfügen.
Wenn Sie einen Standardwert festlegen möchten, sollten Sie dies während der Initialisierung tun.
getter
Funktionen niemals den Wert des Objekts ändern. Sie können diese Prüfung in einer anderen Funktion durchführen und den Wert in einersetter
Funktion festlegen . Nur um einen klaren Code zu haben.Is it bad practice for a getter to change an object's member's value?
da es sich so anhört, als würden Sie sich fragen, ob es schlecht ist, wenn sich die interne Implementierung eines Getters ändert, auf die ich glaube, dass die Antwort Nein lautet. Es ist in Ordnung, sie zu ändern.