Verwenden die Leute praktisch immer defensive Getter/Setter? Meiner Meinung nach beabsichtigen Sie in 99 % der Fälle, dass das Objekt, das Sie in einem anderen Objekt festlegen, eine Kopie desselben Objektverweises ist, und Sie beabsichtigen, dass Änderungen, die Sie daran vornehmen, auch in dem Objekt vorgenommen werden, in dem es festgelegt wurde. Wenn Sie setDate ( Date dt )
und dt später ändern, wen interessiert das? Es sei denn, ich will einige grundlegende unveränderliche Daten Bean, die nur Primitive und vielleicht etwas Einfaches wie ein Datum hat, ich nie verwenden es.
Was das Klonen anbelangt, so gibt es Probleme damit, wie tief oder flach die Kopie ist, so dass es irgendwie "gefährlich" erscheint, zu wissen, was herauskommt, wenn man ein Objekt klont. Ich glaube, ich habe nur Folgendes verwendet clone()
ein- oder zweimal, und zwar, um den aktuellen Zustand des Objekts zu kopieren, da ein anderer Thread (d.h. eine andere HTTP-Anfrage, die auf dasselbe Objekt in der Sitzung zugreift) es ändern könnte.
Edit - Eine Bemerkung, die ich unten gemacht habe, ist eher die Frage:
Aber andererseits haben Sie das Datum geändert, also sind Sie selbst schuld, daher die ganze Diskussion über den Begriff "defensiv". Wenn der gesamte Anwendungscode von einer kleinen bis mittelgroßen Gruppe von Entwicklern selbst kontrolliert wird, reicht es dann aus, die Klassen zu dokumentieren, anstatt Objektkopien zu erstellen? Oder ist dies nicht notwendig, da man immer davon ausgehen sollte, dass etwas NICHT kopiert wird, wenn man einen Setter/Getter aufruft?