-1

私はテトリスゲームを構築しています。私は現在ゲームをデバッグしています。これを行うには、すべての変数の値と変数変数などを確認する必要があります。リフレクションを使用すると、次のようにしてすべてのクラス フィールドを取得できます。

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

各フィールド オブジェクトのすべてのフィールド値を取得する方法がわかりません。

4

1 に答える 1

2

次の 2 つのことを行う必要があります。

  1. 到達可能なオブジェクトのセットを作成します。オブジェクト グラフを永遠に再帰的にトラバースしたくありません。
  2. すべてのオブジェクトの値を出力します。

最初のものについては、次のようなものを使用する必要があります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));
         }
    }
    ...
}

そして、収集したオブジェクトの印刷を開始できます...

于 2013-04-20T21:40:18.150 に答える