@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(). Вам также нужно добавить обработку исключений в случае ошибки при загрузке класса.