Java通过深度反射来访问私有成员变量、方法以及构造方法
话不多说直接上代码
//引入reflect包
import java.lang.reflect.*
//要反射的类
class Foo{
private String name ;
private int age;
private Foo(){
}
private void setAge(int age)
{
this.age = age;
}
public string tostring(){
return"Foo:"+name+","+age;
}
}
//深度反射实现
public class DeepReflection(
public static void main(String[] args) throws Exception{
//访问私有构造函数
Class clz = Foo.class; //获取Foo的类型
Constructor ctor = clz.getDeclaredConstructor();//获取构造器
ctor.setAccessible(true);//使构造器可访问
Foo foo =(Foo) ctor.newInstance();//通过构造器获取foo类的实例
//访问私有字段(属性)
Field field = clz.getDeclaredField("name");//获取构造器内的字段name
field.setAccessible(true);//使字段可访问
field.set(foo,"Tom");//使用字段的set属性
//访问私有方法(步骤是一样的就不写注释了)
Method method=clz.getDeclaredMethod("setAge",int.class);
method.setAccessible(true);
method.invoke(foo,20);
System.out.println(foo);
}
}