![]() |
1
592
为了访问私有字段,需要从类的 宣布 字段,然后使其可访问:
编辑
:已由评论
无尾猿
,同时访问字段、将其设置为可访问并检索值都将引发
这个
这个
这个
|
![]() |
2
124
尝试
|
![]() |
3
24
|
![]() |
4
16
还有一个尚未提及的选项:使用 格罗维 .groovy允许您访问私有实例变量,作为语言设计的副作用。无论你是否有一个场上的盖特,你都可以用
|
![]() |
5
7
使用
Java中的反射
您可以访问
“由于反射允许代码执行在非反射代码中非法的操作,例如访问私有字段和方法,因此反射的使用可能导致意外的副作用,这可能导致代码功能不正常,并可能破坏可移植性。反射代码会破坏抽象,因此可能会随着平台的升级而改变行为。” 下面的代码快照演示了 反射 反射1.java
反射2.java
希望能有所帮助。 |
![]() |
6
5
正如Oxbow-Lakes提到的,您可以使用反射来绕过访问限制(假设您的安全管理器允许您这样做)。 这就是说,如果这个类的设计太差,以至于你求助于这种黑客,也许你应该寻找一种替代方法。当然,这个小黑客现在可能会帮你节省几个小时,但在路上要花多少钱呢? |
![]() |
7
4
使用SOOT Java优化框架直接修改字节码。 http://www.sable.mcgill.ca/soot/ SOOT完全用Java编写,并与新的Java版本一起工作。 |
![]() |
8
2
您需要执行以下操作:
|
![]() |
9
1
关于反射的另外一个注意事项:我在一些特殊情况下观察到,当不同的包中存在多个同名的类时,顶部答案中使用的反射可能无法从对象中选择正确的类。因此,如果您知道对象的package.class是什么,那么最好访问它的私有字段值,如下所示:
(这是不适合我的示例类) |
![]() |
10
0
如果使用弹簧, ReflectionTestUtils 提供了一些方便的工具,可以用最少的努力来帮助解决问题。它被描述为 “用于单元和集成测试方案” . 还有一个类似的类,名为 ReflectionUtils 但这被描述为 “仅供内部使用” -见 this answer 为了解释这意味着什么。 要处理已发布的示例:
|
![]() |
11
0
你可以使用 Manifold's @越狱 对于直接、类型安全的Java反射:
同样,您可以使用 JavaRead() 一次性使用的扩展方法:
通过
在这两种情况下,编译器都会安全地解析您键入的字段访问,就像公共字段一样,而manifold会在引擎盖下为您生成有效的反射代码。 了解更多关于 Manifold . |
![]() |
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 2 年前 |
![]() |
AJA SMBAT · 我在获取列表而不是绑定方法时遇到问题 2 年前 |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 3 年前 |
![]() |
Rocket Procd · 获取活动类实例的数量 3 年前 |
![]() |
cred · 为什么我请求的变量在从另一个类调用时显示为0.0? 3 年前 |
![]() |
Oliver Guy · 一个类的所有实例共享相同的值 3 年前 |