我阅读了以下关于Java中反射的文章:
https://community.oracle.com/docs/DOC-983192
在书中,作者描述了如何通过反射来改变对象字段的值。他解释了如何做到这一点,即使该领域有私人访问。
我回来的时候,我读了约书亚·布洛克的书:《高效Java》。在那里,他说,为了防止对对象的字段、方法等的不安全访问,只要可能,我们应该给字段和方法赋予最严格的修饰符(即,如果可能,则为private,如果是公开api的一部分,则为public或protected)。
我的问题如下:
如果可以通过反射访问合理的信息,为什么还要麻烦设计类来不公开这些信息呢?
(事实上,我是想了解我所缺少的信息来理解这个主题)
首先,"private"并不意味着安全功能。看看这个类似的问题。Java有一个安全系统,如果你真的想要这种保护,你应该使用它。
OOP中的"private"是意向的信号,也是类合同的一部分。通过将一个字段标记为"私有",你就表明,如果有人潜入并通过反射或其他方式修改内容,那么你在课堂其他部分所做的所有保证都将不再有效。
这有点像你的电视或其他设备保修中的细则——如果你开始在电线内部挖掘(可以说是私人领域),那么保修是无效的,三星或其他任何人都不会支付你在那里时可能会出错的维修费用。