获取所有字段值java程序

时间:2013-04-20 21:25:32

标签: java reflection

我正在构建俄罗斯方块游戏。我目前正在调试游戏,为了做到这一点,我需要查看所有变量和变量变量的值等等。通过反射,我可以通过这样做得到所有类字段:

try
{
    for(Field field : this.getClass().getDeclaredFields())
    {
        field.setAccessible(true);
        System.out.println(field.get(this));
    }
}
catch(Exception e)
{   
}

我不知道如何获取每个字段对象的所有字段值。

1 个答案:

答案 0 :(得分:2)

您需要做两件事:

  1. 创建一组可到达的对象。您不希望永久地递归遍历对象图。
  2. 打印每个对象的值。
  3. 对于第一个,您需要使用IdentityHashMap

    之类的内容
    import java.util.IdentityHashMap;
    
    class MyObjectCache
    {
        final IdentityHashSet objects = new IdentityHashSet ();
        ...
    }
    

    要遍历对象,可以使用递归函数(它更简单,但有一个堆栈限制):

    class MyObjectCache
    {
         ....
         void registerObject(Object o)
         {
             if (objects.contains(o))
             {
                 return;
             }
    
             objects.add(o);
             for(Field field : o.getClass().getDeclaredFields())
             {
                 field.setAccessible(true);
                 registerObject(field.get(o));
             }
        }
        ...
    }
    

    然后你可以开始打印收集的对象......