概述
1简单Class
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 解除对象的访问控制符
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反射 设置私有变量 调用私有方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复