8

我通过遵循所有 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.

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

但是还有一个问题,我的对象仍然可以通过java反射来修改,对吗?或者我在课堂上错过了什么?

提前致谢。

4

3 回答 3

8

反射是无懈可击的——即使是不可变的类也不能幸免。但是,您对此无能为力,因此“不能通过反射进行修改”不是不变性的标准之一。

于 2012-10-20T03:44:06.207 回答
3

是的。反射仍然可以访问/更改它。你不能真的计划反对。如果有人用反射改变你的对象,我会怀疑他们编写的代码的质量。

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

于 2012-10-20T05:20:08.137 回答
1

是的,它仍然可以通过反射来修改。除此之外,您似乎需要注意使其不可变。

于 2012-10-20T03:44:47.197 回答