package com.google.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
public class AnalyticClassInfo
{
private static String getModifier
(int modifier
)
{
switch (modifier)
{
result = "private";
break;
result = "public";
break;
result = "protected";
break;
result = "abstract";
break;
result = "final";
break;
result = "native";
break;
result = "static";
break;
result = "synchronized";
break;
result = "strict";
break;
result = "transient";
break;
result = "volatile";
break;
result = "interface";
break;
default:
break;
}
return result;
}
private static void printClassDefinition(Class clz)
{
String clzModifier
= getModifier
(clz.
getModifiers());
if (clzModifier != null && !clzModifier.equals(""))
{
clzModifier += " ";
}
if(clz.getSuperclass()!=null)
{
superClz = clz.getSuperclass().getName();
if (superClz != null && !superClz.equals(""))
{
superClz = " extends " + superClz;
}
}
Class[] interfaces = clz.getInterfaces();
for (int i = 0; i < interfaces.length; i++)
{
if (i == 0)
{
inters += " implements ";
}
inters += interfaces[i].getName();
}
System.
out.
println(clzModifier
+ clz.
getName() + " " + superClz
+ " "
+ inters);
System.
out.
println("fields:");
Field[] fields
= clz.
getDeclaredFields();
for (int i = 0; i < fields.length; i++)
{
String modifier
= getModifier
(fields
[i
].
getModifiers());
if (modifier != null && !modifier.equals(""))
{
modifier = modifier + " ";
}
String fieldName
= fields
[i
].
getName();
String fieldType
= fields
[i
].
getType().
getName();
System.
out.
println(" " + modifier
+ fieldType
+ " " + fieldName
+ ";");
}
System.
out.
println("methods:");
Method[] methods
= clz.
getDeclaredMethods();
for (int i = 0; i < methods.length; i++)
{
String modifier
= getModifier
(method.
getModifiers());
if (modifier != null && !modifier.equals(""))
{
modifier = modifier + " ";
}
String methodName
= method.
getName();
Class returnClz = method.getReturnType();
String retrunType
= returnClz.
getName();
Class[] clzs = method.getParameterTypes();
for (int j = 0; j < clzs.length; j++)
{
paraList += clzs[j].getName();
if (j != clzs.length - 1)
{
paraList += ", ";
}
}
paraList += ")";
clzs = method.getExceptionTypes();
for (int j = 0; j < clzs.length; j++)
{
if (j == 0)
{
exceptions += "throws ";
}
exceptions += clzs[j].getName();
if (j != clzs.length - 1)
{
exceptions += ", ";
}
}
exceptions += ";";
String methodPrototype
= modifier
+ retrunType
+ " " + methodName
+ paraList + exceptions;
System.
out.
println(" " + methodPrototype
);
}
}
/**
* @param args
*/
public static void main
(String[] args
)
{
// TODO Auto-generated method stub
// printClassDefinition(List.class);
// printClassDefinition(Proxy.class);
}
}
//java/1338