Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java程序中的所有字段值_Java_Reflection - Fatal编程技术网

获取java程序中的所有字段值

获取java程序中的所有字段值,java,reflection,Java,Reflection,我正在制作一个俄罗斯方块游戏。我目前正在调试游戏,为了做到这一点,我需要看到所有变量的值和变量等等。通过反射,我可以通过以下操作获得所有a类字段: try { for(Field field : this.getClass().getDeclaredFields()) { field.setAccessible(true); System.out.println(field.get(this)); } } catch(Exception e

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

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

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

您需要做两件事:

  • 创建一组可访问的对象。您不希望永远递归地遍历对象图
  • 打印每个对象的值
  • 对于第一个,您需要使用类似于
    IdentityHashMap

    import java.util.IdentityHashMap;
    
    class MyObjectCache
    {
        final IdentityHashSet objects = new IdentityHashSet ();
        ...
    }
    
    要遍历对象,可以使用递归函数(它更简单,但有堆栈限制):


    然后您可以开始打印收集的对象…

    要进行调试,请使用调试器,它将允许您逐行遍历代码并递归查看所有变量和对象。System.out.println是穷人的调试器。我想这可能行得通,但我需要的是所有字段值,以便我可以在屏幕上显示崩溃报告,而不是在您运行服务并希望能够记录生产状态时。字段值是什么意思?程序中源自我调用methodAn IdentityHashSet的类更合适。另外,getDeclaredFields()不包括继承的字段+不过我不想谢谢你。非常感谢你的建议,我本应该自己做这件事的
    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));
             }
        }
        ...
    }