反射

来源:互联网 发布:90平装修多少钱知乎 编辑:程序博客网 时间:2024/06/08 14:13

利用反射分析类的能力,这个类用反射来打印一个类的所有信息;
import java.lang.reflect包中有三个类 Field,Method, Constructor分别用于描述 域,方法,和构造器;

import java.util.*;import java.lang.reflect.*;/** * This program uses reflection to print all features of a class. * @version 1.1 2004-02-21 * @author Cay Horstmann */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      {         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();      }      System.exit(0);   }   /**    * 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 + ";");      }   }}
0 0