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(");");
}
}
}