我是靠谱客的博主 眯眯眼橘子,这篇文章主要介绍使用java反射 设置私有变量 调用私有方法,现在分享给大家,希望可以做个参考。

1简单Class

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.ruoyi.app; class User { private String u_name; private Company company; @Override public String toString() { return "User{" + "u_name='" + u_name + ''' + ", company=" + company + '}'; } public User() { System.out.println(Thread.currentThread().getName() + "~~~"); } static class Company { private String c_name; private void setName(String name){ c_name+=name+"setName"; } @Override public String toString() { return "Company{" + "c_name='" + c_name + ''' + '}'; } } }

2通过使用 setAccessible 解除对象的访问控制符

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) throws Exception { Class<?> cls = Class.forName("com.ruoyi.app.User");//获取指定类的Class对象 Object obj = cls.getDeclaredConstructor().newInstance();//实例化对象(分配成员空间) Field nameField = cls.getDeclaredField("u_name");// 获取成员对象 nameField.setAccessible(true);//放开权限没有封装了 nameField.set(obj, "卡伦人");//等价于:Person对象name="番茄强"; Field companyField = cls.getDeclaredField("company"); companyField.setAccessible(true); Class<?> companyClass = Class.forName("com.ruoyi.app.User$Company"); Object companyObj = companyClass.getDeclaredConstructor().newInstance(); Method companyMethod = companyClass.getDeclaredMethod("setName", String.class); companyMethod.setAccessible(true); companyMethod.invoke(companyObj, "测试公司"); companyField.set(obj, companyObj); System.out.println(obj);//等价于:Person对象name }

最后

以上就是眯眯眼橘子最近收集整理的关于使用java反射 设置私有变量 调用私有方法的全部内容,更多相关使用java反射内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部