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); //打印出 我的最爱
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。