gpt4 book ai didi

Java:通过反射访问私有(private)字段(行为)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:56 25 4
gpt4 key购买 nike

Java初级;使用反射可以访问私有(private)字段(不问如何, Question 1Question 2 ) 好的。

我的问题与此行为的性质有关。

  1. 有什么限制吗?我可以访问我遇到的任何 .class 的任何字段吗?
  2. 在我的代码中,一旦您将字段的可见性设置为“public”,它会永远改变还是直到上下文结束(方法、if、for.. .)? 代码如下
  3. 每个人都可以吗?我的意思是,StackOverflow 的资深程序员,这是安全漏洞吗?

代码[已编辑]:

  Field f = obj.getClass().getDeclaredField("field"); 
if (...) {
f.setAccessible(true);
// f IS accesible
}
// is f accesible?

最佳答案

有什么限制吗?

是的 - 你需要几个 JVM permissions (最著名的是 accessDeclaredMemberssuppressAccessChecks,在文档中标有粗体警告)以使其起作用;如果您的 JVM 的安全配置文件有些严格(例如,饱受诟病的小程序),您的代码将无法运行,因为这些权限将不可用。

它会永远改变吗?

是的,只要您的程序继续运行,这些字段将保持可访问性(只要您继续使用更改访问权限的同一 Field 实例)。

不好吗?

不一定。它允许 java 代码序列化和反序列化具有私有(private)字段的对象,它允许可以简化测试的复杂模拟,它允许您窥视您原本无法窥视的地方。但是,由于它超出了预期,您应该谨慎使用它并确保用户知道您需要额外的权限并且“正在查看幕后情况”。文档(见上文)非常清楚地表明这被认为是有风险的,只有当您知道自己在做什么时才应该允许这样做。

关于Java:通过反射访问私有(private)字段(行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29947635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com