JavaSE 反射 Part1,javase反射part1
分享于 点击 43584 次 点评:271
JavaSE 反射 Part1,javase反射part1
原作者:尚硅谷-佟刚
package com.atweihai.reflection;
import java.lang.reflect.Method;
import org.junit.Test;
public class ReflectionTest {
@Test
public void testReflection() throws Exception{
//测试子类私有方法
String className="com.atweihai.reflection.Student";
String methodName="method2";
Class clazz=Class.forName(className);
Method method=getMethod(clazz, methodName);
invokeMethod(clazz, method);
//测试父类私有Person 方法
className="com.atweihai.reflection.Student";
methodName="method1";
Object[] args={"北京",24};
clazz=Class.forName(className);
Class[] parameterTypes=getParameterTypes(args);
method=getMethod(clazz, methodName, parameterTypes);
Object obj=invokeMethod(clazz, method, args);
System.out.println(obj);
}
//执行方法
public Object invokeMethod(Class clazz,Method method,Object ... args) throws Exception{
//使私有方法变为可访问的
method.setAccessible(true);
return method.invoke(clazz.newInstance(), args);
}
//获取方法
public Method getMethod(Class clazz,String methodName,Class ... parameterTypes){
Method method=null;
//循环向上转型
for(;clazz!=Object.class;clazz=clazz.getSuperclass()){
try {
method=clazz.getDeclaredMethod(methodName, parameterTypes);
return method;
} catch (Exception e) {}
}
return method;
}
//获取参数类型的Class数组
private Class[] getParameterTypes(Object[] args) {
Class[] parameterTypes=new Class[args.length];
for(int i=0;i<args.length;i++){
parameterTypes[i]=args[i].getClass();
}
return parameterTypes;
}
}
相关文章
- 暂无相关文章
用户点评