利用反射分析类的能力

package com.heima.reflection;
import java.util.*;
import java.lang.reflect.*;

public class Reflection {
	public static void main(String[] args) {
		//read class name from command line args or use input
		String name = "";
		if(args.length>0) {
			name = args[0];
		}
		else {
			Scanner scanner = new Scanner(System.in);
			System.out.println("Enter class name (e.g. java.util.Date): ");
			name = scanner.next();
		}
		
		try {
			Class cl = Class.forName(name);
			Class superCl = cl.getSuperclass();
			String modifiers = Modifier.toString(cl.getModifiers());
			if(modifiers.length()>0) {
				System.out.print(modifiers+" ");
			}
			System.out.print("class "+name);
			if(superCl!=null && superCl != Object.class) {
				System.out.print(" extends "+superCl.getName());
			}
			System.out.print("\n{\n");
			printConstructor(cl);
			System.out.println();
			printMethods(cl);
			System.out.println();
			printFields(cl);
			System.out.println("}");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	public static void printFields(Class cl) {
		// TODO Auto-generated method stub
		Field[] fields = cl.getFields();
		for (Field f : fields) {
			System.out.print("   ");
			Class typeClass = f.getType();
			String modifierString = Modifier.toString(f.getModifiers());
			if(modifierString.length()>0) {
				System.out.print(modifierString + " ");
			}
			System.out.println(typeClass.getName()+" "+f.getName()+";");
		}
	}

	public static void printMethods(Class cl) {
		// TODO Auto-generated method stub
		Method[] methods = cl.getDeclaredMethods();
		for (Method m : methods) {
			System.out.print("   ");
			String modifier = Modifier.toString(m.getModifiers());
			if(modifier.length()>0) {
				System.out.print(modifier+" ");
			}
			System.out.print(m.getReturnType().getName()+" "+m.getName()+"(");
			Class[] parametersClasses = m.getParameterTypes();
			for (int i = 0; i < parametersClasses.length; i++) {
				if(i>0) {
					System.out.print(",");
				}
				System.out.print(parametersClasses[i].getName());
			}
			System.out.println(");");
		}
	}

	public static void printConstructor(Class cl) {
		// TODO Auto-generated method stub
		Constructor[] constructors = cl.getConstructors();
		for (Constructor c : constructors) {
			System.out.print("   ");
			String modifier = Modifier.toString(c.getModifiers());
			if(modifier.length()>0) {
				System.out.print(modifier +" ");
			}
			System.out.print(c.getName()+"(");
			Class[] paramterClasses = c.getParameterTypes();
			for (int i = 0; i < paramterClasses.length; i++) {
				if(i>0) {
					System.out.print(",");
				}
				System.out.print(paramterClasses[i].getName());
			}
			System.out.println(");");
		}
	}
}

posted @ 2021-04-06 22:50  蜗牛321  阅读(55)  评论(0)    收藏  举报