Java 反射:打印对象中包含对象的字段
使用 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
原文地址: https://www.cveoy.top/t/topic/pmVl 著作权归作者所有。请勿转载和采集!