反射可以改变对象的状态吗?

时间:2016-07-25 21:59:39

标签: java oop reflection

我阅读了以下关于Java反思的文章:

https://community.oracle.com/docs/DOC-983192

其中,作者描述了如何通过反射来改变对象场的值。他解释了即使该领域具有私人访问权限也能做到这一点。

我回来的时候,我读过Joshua Block的书:" Effective Java"。在那里,他说,为了防止不安全地访问对象的字段,方法等,我们应该尽可能地给字段和方法提供最严格的修饰符(即,尽可能私有,公共或受保护,如果它是暴露的api的一部分。

我的问题如下:

如果可以通过反射访问,为什么还要设计你的类以不暴露合理的信息呢?

(实际上,我要求提供我缺少的信息来理解这个主题)

1 个答案:

答案 0 :(得分:3)

首先,私人'不是安全功能。见this similar question。 Java有一个安全系统,如果你真的需要这种保护,那就应该使用它。

'私人'在OOP中是意图的信号,是您班级合同的一部分。通过将某个字段标记为“私人”,您就会说如果有人潜入并使用反射或其他内容修改内容,那么您在课程其余部分所做的所有保证都将不再有效。

它类似于电视或其他设备保修的细则 - 如果您开始在布线内部挖掘(可以说是私人字段),则保修无效,三星或无论谁赢了,都要承担修理任何你可能搞砸的费用。