2013-04-20 4 views
-1

Я строю игру в тетрис. В настоящее время я отлаживаю игру, и для этого мне нужно увидеть значения всех переменных и переменных переменных и так далее. С отражением я могу получить все сколько-классы полей, делая это:Получить все значения полей java-программа

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

То, что я не знаю, как получить все значения полей каждого объекта поля.

+4

Для отладки используйте отладчик, который позволит вам пройти через треску e строка за строкой и рекурсивно просматривать все переменные и объекты. System.out.println - отладчик бедного человека. –

+1

Я думаю, что это может сработать, но мне нужны все значения полей для того, чтобы я мог отображать отчет о сбое на экране. –

+0

Нет, если вы используете службу и хотите иметь возможность регистрировать статус в процессе производства. – SirPentor

ответ

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)); 
     } 
    } 
    ... 
} 

И затем вы можете начать печать собранных объектов ...

+1

IdentityHashSet более подходит. Кроме того, getDeclaredFields() не содержат унаследованные поля. +1 хотя. –

+0

@JBNizet спасибо. Мой плохой –

+0

спасибо за совет, я должен был это сделать сам –

Смежные вопросы