我有基本的问题。 Java提供封装以隐藏来自外部世界的数据,并使用访问修饰符提供适当的访问。然后java引入了反射,它允许您从任何地方访问类中可用的所有内容。我想知道为什么需要提供反思。
答案 0 :(得分:0)
在谈到封装时,您可以将Java Reflection API视为一种有用的方法,可以微调类成员的可见性,超出关键字修饰符,例如" private"或"受保护" 。假设您需要限制内部状态对业务逻辑的可见性,但您需要为依赖注入(DI)框架,ORM或其他一些通用基础架构提供对该状态的访问。有三种方法可以做到:
最后一种方法通常更好,因为它允许保持公共API干净(不是第一种方法的情况)和架构松散耦合(像ActiveRecord这样的模式违反了单一责任原则,在同一个对象上放了太多的帽子)。
此外,通过反思访问私人成员并不是绝对的:它仍然可以得到保护。 Java安全机制允许阻止对未授权客户端的私有成员的访问(查看Field :: get和Method :: invoke上的异常列表)。