java中的不可变类

遵循所有java标准,我使我的类不可变

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. 

这些是我在设计不可变类时所做的初步检查点。

但是还有一个问题,我的对象仍然可以通过javareflection进行修改,对不对? 或者我在课堂上错过了什么?

提前致谢。

没有任何隐藏的反思 – 即使是不可改变的类也无法免疫。 但是,你无能为力,所以“不能通过反思修改”不是不变性的标准之一。

是。 reflection仍然可以访问/更改它。 你无法真正反对这一点。 如果有人用reflection改变你的对象,我会怀疑他们写的代码的质量。

不可变类非常适合确保线程安全的应用程序。 不可变对象始终是线程安全的。 如果您正在寻找更多有用的信息,请阅读Effective Java。 这对于任何Java开发人员来说都是必读的。

是的,它仍然可以通过反思进行修改。 除此之外,似乎你需要小心使它变得不可变。