使用 Java 反射机制可以打印一个对象中包含对象的字段内容,包括递归打印嵌套对象字段。通过反射获取对象的所有字段,并判断字段类型是否为对象类型。如果是对象类型,则递归打印该对象中的字段。

以下是示例代码:

import java.lang.reflect.Field;

public class ReflectionExample {
    public static void main(String[] args) {
        // 创建一个包含对象的示例对象
        Person person = new Person("John", 25, new Address("123 Main St", "City"));

        // 使用反射获取对象的所有字段
        Field[] fields = person.getClass().getDeclaredFields();

        // 遍历所有字段并打印
        for (Field field : fields) {
            field.setAccessible(true); // 设置字段可访问
            try {
                // 判断字段类型是否为对象类型
                if (field.getType().isAssignableFrom(Object.class)) {
                    // 获取对象字段的值
                    Object fieldValue = field.get(person);
                    System.out.println(field.getName() + " = " + fieldValue);

                    // 如果对象字段不为空,则递归打印对象中的字段
                    if (fieldValue != null) {
                        Field[] objectFields = fieldValue.getClass().getDeclaredFields();
                        for (Field objectField : objectFields) {
                            objectField.setAccessible(true);
                            Object objectFieldValue = objectField.get(fieldValue);
                            System.out.println(objectField.getName() + " = " + objectFieldValue);
                        }
                    }
                } else {
                    // 如果字段类型不是对象类型,则直接打印字段的值
                    System.out.println(field.getName() + " = " + field.get(person));
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

class Person {
    private String name;
    private int age;
    private Address address;

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

class Address {
    private String street;
    private String city;

    public Address(String street, String city) {
        this.street = street;
        this.city = city;
    }
}

在上面的代码中,我们创建了一个Person类和一个Address类。Person类包含一个Address对象作为字段。然后使用反射获取Person对象的所有字段,并递归打印包含对象的字段。输出结果如下:

name = John
age = 25
address = Address@6d06d69c
street = 123 Main St
city = City
Java 反射:打印对象中包含对象的字段

原文地址: https://www.cveoy.top/t/topic/pmVl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录