Frage Unverwechselbare Klasse in Java


Ich habe meine Klasse unveränderlich gemacht, indem ich alle Java-Standards befolgt habe

A. Defined class as final
B. declared all fields as private and final
C. No setter method
D. No method changes the state of object
E. declared all method as final
F. Safer/defencieve copying of collection/ non mutable object fields.

Dies sind die ersten Checkpoints, die ich gemacht habe, als ich eine unveränderliche Klasse entworfen habe.

Aber eine Frage noch, mein Objekt kann noch durch Java-Reflektion modifiziert werden, habe ich recht? Oder gibt es einen Punkt, den ich in der Klasse verpasst habe?

Danke im Voraus.


6
2017-10-20 03:40


Ursprung


Antworten:


Es gibt kein Versteck vor der Reflexion - selbst unveränderliche Klassen sind nicht immun. Es gibt jedoch nichts, was man dagegen tun kann, also "kann nicht durch Reflexion verändert werden" ist nicht eines der Kriterien der Unveränderlichkeit.


7
2017-10-20 03:44



Ja. Reflection kann immer noch darauf zugreifen / ändern. Sie können dagegen nicht wirklich planen. Wenn jemand Ihr Objekt durch Reflexion verändert, würde ich an der Qualität des Codes zweifeln, den sie schreiben.

Unveränderbare Klassen sind fantastisch, um Thread-sichere Anwendungen zu gewährleisten. Unveränderliche Objekte sind IMMER Thread-sicher. Wenn Sie nach mehr Informationen suchen, lesen Sie bitte Effektives Java. Es ist ein Muss für jeden Java-Entwickler.


2
2017-10-20 05:20



Ja, immer noch kann es durch Reflexion verändert werden. Abgesehen davon scheint es, dass Sie die erforderliche Sorgfalt ergriffen haben, um es unveränderlich zu machen.


1
2017-10-20 03:44