java反射中如何改变private中的变量及方法呢?
下文笔者将讲述使用Java代码修改类中private中的变量及方法的示例,
通过对此示例的学习,大家可以了解到反射修改private变量的方法,如下所示:
通过对此示例的学习,大家可以了解到反射修改private变量的方法,如下所示:
定义一个类
class TestClass{
private String name="java265.com";
public getName(){
system.out.println("public getName " + name);
return name;
}
private getName2(){
system.out.println("private getName2 " + name);
return name;
}
public TestClass(){}
}
如果我们需name的值,可以使用一下方法
//未修改前的name值
class<TestClass> calzz=TestClass.class;
//获取其构造方法
Constructor cons=clazz.getConstructor(new class[]{});
//实例化对象
TestClass test=(DemoTest)cons.newInstance();
//运行getName方法
Method method=clazz.getMethod("getName",new Class[]{String.class});
method.invoke(test);
//打印出 java265.com
-------------------------------------------------------------------------
此时修改name值的方法,如下所示:
//获取field
Field field=clazz.getDeclaredField("name");
//将此对象accessible的值设置为true
//此种设置为调整java语言的访问性检查
field.setAccessible(true);
//修改变量值
field.set("name","我的最爱");
//测试修改值是否成功
Method method=clazz.getDeclaredMethod("getName2");
method.setAccessible(true);
method.invoke(test);
//打印出 我的最爱
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


