/*
*/
/*
* An example of using reflection to get information about
* a named Java class, even if that class hasn't already
* been loaded. This is handy for getting some information
* about a class that you don't have any documentation for.
*
* In this implementation, the class you're looking at must
* be on your CLASSPATH, and you must use the full name of
* the class (i.e. java.lang.String instead of just String).
*/
import java.lang.reflect.*;
public class ReflectClass {
static String indent = " ";
public static void main (String args[])
{
if (args.length == 0) {
System.out.println("USAGE: java ReflectClass className");
return;
}
try {
// you can use a ClassLoader to get an instance of the Class,
// or you can use the Class.forName() method
//ClassLoader cl = new ReflectClass().getClass().getClassLoader();
//Class cls = cl.loadClass(args[0]);
Class cls = Class.forName(args[0]);
printClassInfo(cls);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void printClassInfo (Class cls)
{
System.out.println("Reflected information about " + cls.getName() + ":");
System.out.println(cls);
System.out.println("Extends: " + cls.getSuperclass().getName());
Class[] inters = cls.getInterfaces();
if (inters.length > 0) {
System.out.print("Implements: ");
for (int i = 0; i < inters.length; i++)
System.out.print((i > 0 ? ", " : "") + inters[i].getName());
System.out.println("");
}
System.out.println("");
// public fields
System.out.println("FIELDS:");
Field[] fields = cls.getFields();
for (int i = 0; i < fields.length; i++)
System.out.println(indent + fields[i]);
// constructors
System.out.println("CONSTRUCTORS:");
Constructor[] cons = cls.getConstructors();
for (int i = 0; i < cons.length; i++)
System.out.println(indent + cons[i]);
// public methods
System.out.println("METHODS:");
Method[] methods = cls.getMethods();
for (int i = 0; i < methods.length; i++)
System.out.println(indent + methods[i]);
}
}