您的位置:首页 > 编程语言 > Java开发

Java反射技术二:利用反射打印一个类的构造函数、方法、域

2015-06-02 23:37 701 查看
转自:http://blog.chinaunix.net/uid-26434689-id-3338249.html

5.反射的例子:

利用反射打印一个类的构造函数、方法、域

public class ReflectTest {

public static void main(String[] args){
String name;
if(args.length > 0){
name = args[0];
}else{
Scanner in = new Scanner(System.in);
System.out.println("Enter class name (e.g. java.util.Date): ");
name = in.next();
}

try{
//print class name and superclass name(if != Object)
Class c1 = Class.forName(name);
Class superc1 = c1.getSuperclass();
String modifiers = Modifier.toString(c1.getModifiers());
if(modifiers.length() > 0)    System.out.print(modifiers+" ");
System.out.print("class "+name);
if(superc1 != null && superc1 != Object.class)    System.out.println(
" extends"+superc1.getName());

System.out.print("\n{\n");
printConstructors(c1);
printMethods(c1);
printFields(c1);
System.out.println("}");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
System.exit(0);
}

/*
* prints all constructors of a class
*/
public static void printConstructors(Class c1){
Constructor[] constructors = c1.getConstructors();

for(Constructor c:constructors){
String name = c.getName();
System.out.print(" ");
String modifiers = Modifier.toString(c1.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(", ");
System.out.print(paramTypes[j].getName());
}
System.out.println("); ");
}
}

/**
* prints all methods of a class
*/
public static void printMethods(Class c1){
Method[] methods = c1.getMethods();

for(Method m : methods){
Class retType = m.getReturnType();
String name = c1.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 types
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 fields of a class
*/
public static void printFields(Class c1){
Field[] fields = c1.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+" "+name+";");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: