微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗?

如何解决为什么 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗?

我们可以通过 Java 反射 API 访问私有变量。那么访问修饰符有什么用呢?还可以帮助我更好地了解访问修饰符(私有、公共等)在实际应用中的实际用法

解决方法

它仍然保护私有变量不被开发人员误用。如果有人使用反射来访问私有变量,他(希望)知道他在做什么。

此外,大多数框架不会直接访问变量,而是会查找变量的 getter 和 setter。

,

通过反射“访问私有”字段在很长一段时间内不会得到支持,最终它会消失。在最新的 Java 版本中,当您尝试以反射方式(如 privateprotected)访问事物时,您已经收到警告。在未来的版本中,这可能会完全消失。 JVM 通过项目 jigsaw 在每个版本中变得越来越封装和受限。

如果您不在适当的范围内,java 中较新的 API(例如 MethodHandles)可以通过 private 创建/访问 privateLookupIn 成员将失败。简而言之 - 您可以访问某些代码的私有成员,例如在允许/公开此类访问的 module 中,但并非无处不在。在某种程度上,这是一个更具限制性的 API,而不是 reflection。因此,通过精心设计的较新 API 来阻止此类使用的工作正在进行中。

关于库使用反射的论点 - 这是真的。但很少有好的图书馆需要私人访问。 Spring,这是最著名的 - 不需要该信息。它只需要 public class 数据(例如 public 的方法)、annotations 等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。