使用java中的反射机制调用其他类中的方法,构造器,以及相关属性
首先我们需要明白java中提供的反射中的一些相关方法:
在java.lang.reflect包中有三个类Field,Method,Constructor分别用来描述类的域,方法以及构造器。
接下来进入主题:
这里是打印出你要查询的类的名字,使用限制,以及它的父类
String name; Scanner s = new Scanner(System.in); name = s.nextLine(); try { Class c = Class.forName(name); Class c1 = c.getSuperclass(); String str = c.getName(); String modify = Modifier.toString(c.getModifiers()); System.out.print(modify+" "+name); if(c1 != null) { System.out.print(" extends "+c1.getName()); } |
接下来写三个方法分别获得Constructor,Method,Field
public static void printConstructors(Class c) public static void printMethods(Class c) public static void printFields(Class c) |
具体方法如下:
public static void printConstructors(Class c) { Constructor []con = c.getDeclaredConstructors(); try { for(Constructor temp : con) { System.out.print(" "); String m = Modifier.toString(temp.getModifiers()); String name = temp.getName(); System.out.print(m+" class "+name+" ("); Class []param = temp.getParameterTypes(); for(Class c1 : param) { System.out.print(c1); } System.out.println(" )"); } } catch (Exception e) { e.printStackTrace(); } } |
public static void printMethods(Class c) { Method[] m = c.getDeclaredMethods(); for(Method temp : m) { System.out.print(" "); String modifer = Modifier.toString(temp.getModifiers()); String name = temp.getName(); Class returnType = temp.getReturnType(); Class []paras = temp.getParameterTypes(); System.out.print(modifer+" "+returnType+" "+name+" ("); for(int j=0;j<paras.length;j++) { if(j>0) System.out.print(","+paras[j]); else System.out.print(paras[j]); } System.out.print(")"); System.out.println(); } } |
public static void printFields(Class c) { Field []f = c.getDeclaredFields(); for(Field temp : f) { System.out.print(" "); String modifer = Modifier.toString(temp.getModifiers()); String name = temp.getName(); Class type = temp.getType(); System.out.print(modifer); if(modifer.length()>0) System.out.print(modifer); System.out.print(type+" "+name); System.out.println(); } System.out.print(")"); System.out.println("}"); } |
结果:如图