package test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;
public class ReflectionTest {
public static void main(String[] args) {
//read class name from command line args or user input
String name;
if(args.length>0)
name=args[0];
else
{
var in=new Scanner(System.in);
System.out.println("Enter class name (e.g. java.util.Date):");
name=in.next();
}
//print class name and superclass name (if!=Object)
Class cl=null,supercl=null;
try {
cl=Class.forName(name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
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.println(" extends "+supercl.getName());
System.out.println("\n{");
printConstructors(cl);
System.out.println();
printMethods(cl);
System.out.println();
printFields(cl);
}
//print all constructors of a class
public static void printConstructors(Class cl)
{
Constructor[] constructors=cl.getDeclaredConstructors();//返回声明的全部构造器,但是不包括继承的 ;getConstructors()返回公共的,包括继承的
for(Constructor c:constructors)
{
String name=c.getName();
System.out.print(" ");
String modifiers=Modifier.toString(c.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.print(name+"(");
//print parameter types
Class[] paramTypes=c.getParameterTypes();//得到方法签名中的参数
for(int j=0;j<paramTypes.length;j++)
{
if(j>0)
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
//print all methods of a class
public static void printMethods(Class cl)
{
Method[] methods=cl.getDeclaredMethods();
for(Method m:methods)
{
Class retType=m.getReturnType();//得到返回类型
String name=m.getName();
System.out.print(" ");
//print modifiers return type and method name
String modifiers=Modifier.toString(m.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.print(retType.getName()+" "+name+"(");
//print parameter type
Class[] paramTypes=m.getParameterTypes();
for(int j=0;j<paramTypes.length;j++)
{
if(j>0)
System.out.print(", ");
System.out.print(paramTypes[j].getName());
}
System.out.println(");");
}
}
//print all field of a class
public static void printFields(Class cl)
{
Field[] fields=cl.getDeclaredFields();
for(Field f:fields)
{
Class type=f.getType();
String name=f.getName();
System.out.print(" ");
String modifiers=Modifier.toString(f.getModifiers());
if(modifiers.length()>0)
System.out.print(modifiers+" ");
System.out.println(type.getName()+" "+name+";");
}
}
}
打印一个类的全部信息
最新推荐文章于 2021-11-25 21:12:58 发布