0

反射打破了封装原则。我们可以保护封装原则不被反射吗?是否有任何 API 可以保护封装免受反射?

4

2 回答 2

1

从技术上讲,是的。对 SO 的快速搜索给出了一个防止反射的示例:https ://stackoverflow.com/a/770672/2372767 。不过话说,

反射打破了封装原则......

意味着对原理的误解。封装的重点不是保护您的代码免受恶意其他代码的侵害,或保护您的实现,甚至创建某种级别的安全性。

当您使用公共和私有方法创建接口(类、模块、对象等)时,实际上是在创建两个接口:一个易于使用,另一个不易于使用。本质上,当您将某事设为私有时,您真正想说的是“这是完成某事的混乱、复杂细节的一部分,直接调用它可能很危险。”

我要强调的一点是:你的私有接口仍然是一个接口,应该像对待你的公共方法一样小心对待。虽然您永远不应该鼓励其他程序员使用私有成员,但您不知道其他人何时需要使用其中一个混乱、复杂的步骤。

正如其他用户所提到的,还有其他方法可以获得私人班级成员。反射是一个易于使用的 API 来完成相同的任务。

于 2013-08-05T17:00:45.603 回答
0

在封装的许多定义中都这样说A language mechanism for restricting access to some of the object's components.您在设计应用程序时使用此机制。无论如何,它从来都不是保护应用程序的任务。因此,您可能不会将此概念用作安全机制,并且您肯定不会声称 Reflection 会阻止它。只有开发人员可以通过留下未封装的东西来阻止反射。

于 2013-08-05T16:24:40.013 回答