Java オブジェクトから深くネストしたデータを取得する方法
オブジェクトの深いデータを取得するには、オブジェクトのプロパティを再帰的にたどる再帰方法を使用します。
public class Main {
public static void main(String[] args) {
// 创建一个对象
Person person = new Person("John", 25, new Address("123 Street", "City"));
// 获取对象的深层数据
getDeepData(person);
}
public static void getDeepData(Object obj) {
// 判断对象是否为基本类型或字符串
if (obj == null || obj instanceof String || obj.getClass().isPrimitive()) {
System.out.println(obj);
return;
}
// 获取对象的所有属性
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
try {
// 设置属性可访问
field.setAccessible(true);
// 获取属性的值
Object fieldValue = field.get(obj);
// 递归获取属性的深层数据
getDeepData(fieldValue);
} 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オブジェクトを作成し、再帰メソッドgetDeepDataを使ってオブジェクトの深いデータを取得しました。getDeepDataメソッドは、まずオブジェクトが基本型か文字列かどうかを判定します。そうだった場合、直接そのオブジェクトを出力します。そうでなければ、オブジェクトのすべてのプロパティを取得し、再帰的にgetDeepDataメソッドを呼び出して各プロパティの深いデータを取得します。再帰呼び出しの際には、プロパティの値をパラメータとしてgetDeepDataメソッドに渡します。こうした方法で、オブジェクトのすべての深いデータを走査して取得できます。