Самоанализ объекта для печати атрибута

Я схватил этот фрагмент кода:

ClassABC abc = new ClassABC();
for (Field field : abc.getClass().getDeclaredFields()) {
    field.setAccessible(true);
    String name = field.getName();
    Object value = field.get(abc);
    System.out.printf("Field name: %s, Field value: %s%n", name, value);
}

из этого вопроса

Однако мне нужно что-то, что будет захватывать атрибуты из живого объекта, а не из класса. Я знаю, что мне нужен самоанализ. Я просто не знаю, как получить от живого объекта.


person Will    schedule 09.10.2012    source источник


Ответы (3)


Этот:

Object value = field.get(abc);

Получает значение из экземпляра Object, на который ссылается abc.

Вы можете анализировать только классы, а затем использовать предоставленные поля и методы для взаимодействия с созданными объектами.

person dngfng    schedule 09.10.2012

Класс имеет атрибуты / свойства, объект - это состояние, и он имеет значения только для этих атрибутов.

ClassABC abc = new ClassABC();

Выше декларации вы создали объект класса ClassABC.

Object value = field.get(abc);

field.get(abc) вернет вам значение поля для объекта abc. Таким образом, вы можете проводить самоанализ значений свойств объекта во время выполнения.

# Field.get ()

Возвращает значение поля, представленного этим полем, для указанного объекта. Значение автоматически помещается в объект, если он имеет примитивный тип.

person Amit Deshpande    schedule 09.10.2012

Однако мне нужно что-то, что будет захватывать атрибуты из живого объекта, а не из класса.

«Живой» объект является экземпляром некоторого класса, и этот класс будет определять, какие поля имеет объект. Код в вашем вопросе делает именно то, что вам нужно.

(Java не позволяет вам добавлять новые поля / атрибуты к объекту на лету ... например, языки, такие как Javascript, Python, Ruby и т. Д.)

person Stephen C    schedule 09.10.2012