java反射
public void gets(Class<?> clazz) throws Exception {Object e=clazz.newInstance(); //实例化对象
// 获取字段
java.lang.reflect.Field[] fies = clazz.getDeclaredFields(); // 获得全部字段
java.lang.reflect.Field[] pubFies = clazz.getFields(); // 获得全部公有字段
System.out.println("全部字段个数:" + fies.length + "\n公有字段个数:"
+ pubFies.length);
for (int i = 0; i < fies.length; i++) {
fies.setAccessible(true); // 设置私有字段为外部可访问
System.out.println(javassist.Modifier.toString(fies
.getModifiers())
+ " "
+ fies.getType()
+ " "
+ fies.getName() + "=" + fies.get(e));
}
// 获取方法
// java.lang.reflect.Method[] mss = clazz.getMethods(); //
// 获取全部方法,含继承的方法
java.lang.reflect.Method[] mss = clazz.getDeclaredMethods(); // 获取全部方法,不包含继承的方法
for (int i = 0; i < mss.length; i++) {
Class<?>[] ps = mss.getParameterTypes(); // 获取参数类型
String modifier = javassist.Modifier
.toString(mss.getModifiers()); // 获取修饰符
Class<?> returnVal = mss.getReturnType(); // 获取返回类型
System.out.print("修饰符:" + modifier + "返回类型:" + returnVal.getName()
+ "方法名:" + mss.getName() + "参数类型:");
Object[] parameters = new Object;
for (int j = 0; j < ps.length; j++) {
System.out.print(ps.getName() + ",");
if (ps.getName().equals("int")
|| ps.getName().equals("double")
|| ps.getName().equals("long")) { //设置参数(要排除基本类型,基本类型不能用newInstance)
parameters = 1;
} else {
parameters = ps.newInstance();
}
}
System.out.print("\n");
if (modifier.equalsIgnoreCase("public")) {
java.lang.reflect.Method m = clazz.getMethod(
mss.getName(), ps); // 获得某一方法,ps为参数数据类型数组
// if (ps.length == 0) {
System.out.println("执行结果:" + m.invoke(e, parameters));
// }
}
}
// 获得构造器
java.lang.reflect.Constructor<?>[] cs = clazz.getConstructors();
for (int i = 0; i < cs.length; i++) {
System.out.print(" 构造器" + (i + 1) + " 参数类型:");
Class<?>[] pcs = cs.getParameterTypes();
for (int j = 0; j < pcs.length; j++) {
System.out.print("" + pcs.getName());
}
}
}
页:
[1]