有些地方不懂,一个个问;import java.lang.reflect.*;
import java.util.*;
import java.text.*;public class ObjectAnalyzerTest{
  public static void main(String args[]){
     ArrayList<Integer> s = new ArrayList<Integer>();
     for(int i=1;i<=5;i++){
         s.add(i*i);
     }
     System.out.println(new ObjectAnalyzer().toString(s));
  }
}class ObjectAnalyzer{
  private ArrayList<Object> v = new ArrayList<Object>();
    public String toString(Object obj){
        if(obj == null){
            return "null";
        }
        if(v.contains(obj)){
            return "...";
        }
        v.add(obj);  //(2)这段代码起什么作用啊?
        Class cl = obj.getClass();
        if(cl == String.class){
            return (String)obj;
        }
        if(cl.isArray()){  //(1)判断当前Class对象表示的是不是一个数组,请问这句在什么时候为真啊?
                   //ArrayList<Integer> s = new ArrayList<Integer>();s.getClass().isArray()这个为false啊?
           //System.out.println("I'm array!");
           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();
    do{
          r += "[";
          Field fields[] = cl.getDeclaredFields();
          AccessibleObject.setAccessible(fields,true);
          for(Field f : fields){
             if(!Modifier.isStatic(f.getModifiers())){
               if(!r.endsWith("[")){
                 r += ",";
               }
               r += (f.getName() + "=");
               try{
                 Class t = f.getType();
                 Object o = f.get(obj);
                 if(t.isPrimitive()){
                     r += o;
                 }else{
                    r += toString(o);
                 }
              }catch(Exception e){
                 e.printStackTrace();
              }
          }
          }
          r += "]";
          cl = cl.getSuperclass();
      }while(cl != null);
      return r;
    }
}

解决方案 »

  1.   

    传进去的obj不是数组,是ArrayList类型的变量啊?
      

  2.   

    ArrayList 这个应该也是数组类型的吧?
      

  3.   

    (2) 没用  因为下面就没有用到v        String s[] = {"1","2"};
            boolean b = s.getClass().isArray();
            System.out.println(b);// true
      

  4.   

    v.add(obj);  //(2)这段代码起什么作用啊?v的这个list里面添加一个对象(obj)