本帖最后由 yaojianquansb 于 2010-09-18 14:10:06 编辑

解决方案 »

  1.   

    把Field fields[] = cl.getFields();
    改为Field fields[]  = getDeclaredFields();
       for(fields : field) {
          field.setAccesible(true);
       }
    估计就能够访问私有变量了
      

  2.   

    import java.lang.reflect.*;
    class Student{
        private static int x = 3;
        private int y =9;
        public static int z = 18;
        public int n = 27;
    }
    public class TestReflect{
        public static void main(String args[]){
            printInstanceInfo(new Student());
        }
        public static void printInstanceInfo(Object obj){
            Class cl = obj.getClass();
            String r = cl.getName()+"[";
            Field fields[] = cl.getDeclaredFields();  //这个地方写错了
            AccessibleObject.setAccessible(fields,true);
              //已经设置了取消访问检查,为何前两个私有变量还输不出来呢?
            for(Field f : fields){
                if(!r.endsWith("[")){
                    r += ",";
                }
                r += f.getName() + "=";
                try{
                    Object o = f.get(obj);
                    r += o;
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            r += "]";
            System.out.println(r);    
            
        }
    }
      

  3.   

    Field fields[] = cl.getDeclaredFields(); //这个地方写错了
    你写成Field fields[] = cl.getFields();
    你写的方法只能拿到public的字段,你查查API。
    问题解决,给分,谢谢。
      

  4.   

    getFields();只返回类的可访问字段,private属性是得不到的!
    getDeclaredFields();才能返回所有属性,包括private属性