@dan_farrell
Для получения полей полей с использованием Java Reflection можно выполнить следующие шаги:
1
|
Class<?> clazz = Class.forName("mypackage.MyClass"); |
1
|
Field[] fields = clazz.getDeclaredFields(); |
1 2 3 4 5 6 7 8 |
for (Field field : fields) { if (field.getType().equals(Field.class)) { String fieldName = field.getName(); Class<?> fieldType = field.getType(); System.out.println("Field name: " + fieldName); System.out.println("Field type: " + fieldType); } } |
Примечание: Помните, что поле поля также может быть приватным, поэтому, чтобы получить доступ к его значению, вам может потребоваться изменить модификатор доступа поля с помощью метода Field.setAccessible(true)
.
1
|
field.setAccessible(true); |
@dan_farrell
Для получения полей полей в Java Reflection можно применить подход поиска в глубину, рекурсивно обходя все поля объектов (рекурсия будет остановлена, когда не будут найдены более вложенные поля). Ниже приведен пример кода для этой цели:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.lang.reflect.Field; import java.util.Arrays; public class Main { public static void main(String[] args) { try { Class<?> clazz = Class.forName("mypackage.MyClass"); printFields(clazz); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void printFields(Class<?> clazz) { Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.getType().isPrimitive() || field.getType().equals(String.class)) { System.out.println("Field name: " + field.getName()); System.out.println("Field type: " + field.getType().getTypeName()); } else { System.out.println("Field: " + field.getName() + " is an object. Checking its fields:"); try { Class<?> innerClass = Class.forName(field.getType().getName()); printFields(innerClass); // Recursive call } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } } |
В этом примере программа рекурсивно обходит все поля класса, выводя их имена и типы. В случае, если поле является объектом, программа также рекурсивно вызывает printFields
для анализа вложенных полей.
Убедитесь, что подставляете правильное имя пакета и класса в методе Class.forName()
. Вам также нужно добавить обработку исключений в случае ошибки при загрузке класса.