反射的两个小例子(根据类名打印全部类信息、泛型数组)

/** 
   @version 1.10 2002-06-30 
   @author Cay Horstmann 
*/ 

import java.lang.reflect.*; 
import java.util.*; 
import java.text.*; 

public class ObjectAnalyzerTest 
{   
   public static void main(String[] args) 
   {  
      Object obj = NumberFormat.getCurrencyInstance(); 
      System.out.println(new ObjectAnalyzer().toString(obj)); 
   } 
} 

class ObjectAnalyzer 
{ 
   /** 
      Converts an object to a string representation that lists  
      all fields.  
      @param obj an object 
      @return a string with the object's class name and all 
      field names and values 
   */ 
   public String toString(Object obj) 
   {   
      if (obj == null) return "null"; 
      if (visited.contains(obj)) return "..."; 
      visited.add(obj); 
      Class cl = obj.getClass(); 
      if (cl == String.class) return (String)obj; 
      if (cl.isArray()) 
      { 
         String r = cl.getComponentType() + "[]{"; 
         for (int i = 0; i < Array.getLength(obj); i++) 
         { 
            if (i > 0) r += ","; 
            Object val = Array.get(obj, i); 
            if (cl.getComponentType().isPrimitive()) r += val; 
            else r += toString(val);             
         } 
         return r + "}"; 
      } 

      String r = cl.getName(); 
      // inspect the fields of this class and all superclasses 
      do 
      { 
         r += "["; 
         Field[] fields = cl.getDeclaredFields(); 
         AccessibleObject.setAccessible(fields, true); 
         // get the names and values of all fields 
         for (int i = 0; i < fields.length; i++) 
         {   
            Field f = fields[i]; 
            if (!Modifier.isStatic(f.getModifiers())) 
            { 
               if (!r.endsWith("[")) r += ","; 
               r += f.getName() + "="; 
               try 
               {   
                  Class t = f.getType(); 
                  Object val = f.get(obj); 
                  if (t.isPrimitive()) r += val; 
                  else r += toString(val); 
               }  
               catch (Exception e) { e.printStackTrace(); } 
            } 
         } 
         r += "]"; 
         cl = cl.getSuperclass(); 
      } 
      while (cl != null); 

      return r; 
   } 

   private ArrayList visited = new ArrayList(); 
} 



[size=11px]static void arrayPrint(Object a) {
  Class cl = a.getClass();
  if (!cl.isArray()) {
  return;
  }
  Class componentType = cl.getComponentType();
  int length = Array.getLength(a);
  System.out.println(componentType.getName() + "{" + length + "} = {");
  for (int index = 0; index < Array.getLength(a); index++) { //此处Array.getLength(a) 改成 length会更好
  System.out.println(Array.get(a, index) + "" );
  }
  System.out.println("}");
}


你可能感兴趣的:(exception,object,String,null,Class,import)