——- android培训、java培训、期待与您交流! ———-
Java反射机制主要提供了以下功能:
1,在运行时判断任意一个对象所属的类;
2,在运行时构造任意一个类的对象;
3,在运行时判断任意一个类所具有的成员变量和方法;
4,在运行时调用任意一个对象的方法;生成动态代理。
1、 得到对象的属性
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass(); //获取字节码对象
Field field = ownerClass.getField(fieldName); //获取类声明的属性
Object property = field.get(owner); //得到该属性的实例
return property;
}
2. 得到类的静态属性
public Object getStaticProperty(String className, String fieldName) throws Exception {
Class ownerClass = Class.forName(className); //获取字节码对象
Field field = ownerClass.getField(fieldName); //获取类声明的属性
Object property = field.get(ownerClass); //得到该属性的实例
return property;
}
3. 执行对象的方法
public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) { //配置参数的Class数组,作为寻找Method的条件
argsClass = args.getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
4. 新建实例
public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass = args.getClass();
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass = args.getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}