From e61c65c81597af0865780ebfb979728676819e8e Mon Sep 17 00:00:00 2001 From: mr-fool Date: Mon, 2 Mar 2015 14:47:29 -0700 Subject: [PATCH] Requirement list Oh, and I need a requirement list so I can make sure I am actually fulfilling the requirement --- src/org/ReflectionTest.java | 119 ++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/org/ReflectionTest.java diff --git a/src/org/ReflectionTest.java b/src/org/ReflectionTest.java new file mode 100644 index 0000000..c3f38de --- /dev/null +++ b/src/org/ReflectionTest.java @@ -0,0 +1,119 @@ +import java.util.*; +import java.lang.reflect.*; + +/** +* This program uses reflection to print all features of a class. +* Not the author +* Minor mod +*/ +public class ReflectionTest { + public static void main(String[] args) { + // read class name from command line args and if args is empty prompt user input + 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 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"); + + printConstructors(cl); + System.out.println(); + printMethods(cl); + System.out.println(); + printFields(cl); + System.out.println("}"); + } + catch (ClassNotFoundException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + System.exit(0); +}//end of main + + /** + * * Prints all constructors of a class + * @param cl a class + */ + public static void printConstructors(Class cl) { + Constructor[] constructors = cl.getDeclaredConstructors(); + 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(", "); + System.out.print(paramTypes[j].getName()); + } + System.out.println(");"); + } + } + +/** + * * Prints all methods of a class +* @param cl 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 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(");"); + } + } + +/** +* Prints all fields of a class +* @param cl 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 + ";"); + } + } + }