——— android培训、java培训、期待与您交流! ———
理解反射
所谓反射,就是把一个类里面所有的变量和方法以及构造器的信息都复制出来,可以查看,还可以使用。所以反射的出现让我们可以动态的实用类和对象,
反射的操作:得到类的Class对象,抽取Class对象中的属性信息,得到这个类的变量、方法和构造函数。
实践在java中即是:通过Class类获取原类的所有信息,通过Property类将信息保存到Field或Method、Constructor类中。
反射操作
代码:
Class c //得到某个类的Class对象
PropertyDescriptor pd //得到这个类的某个属性
Method method //得到这个属性的操作方法(get、set)
// get -> getReadMethod()
// set -> getWriteMethod()
method.invoke(obj) //对这个对象操作这个方法
例:
Class c = obj.getClass();
PropertyDescriptor pd = new
PropertyDescriptor(field,c);
Method method = pd.getReadMethod();
return method.invoke(obj);
Class类
Class类存放原类的所有信息,是反射的基础。
有三种方法得到类的Class对象:
- 类名.class
- 变量名.getClass()
Class.forName(“类名”)
还有一种比较特殊的:数值类型.Type
代码:
Person person = new Person();
Class class1 = Person.class;
Class class2 = person.getClass();
Class class3 = Class.forName("Person");
将类的信息保存进Method对象中后,通过invoke()方法使用类中的方法。
Constructor
存放类的构造函数
代码:
Class c = Person.class;
//args...处是参数列表
Constructor constructor = c.getDeclaredConstructor(args...);
//获得所有构造函数
Constructor[] declaredConstructor = c.getDeclaredConstructors()