package com.gxgx.sc.util;
import cn.hutool.core.convert.Convert;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
public class DataGetValueUtil {
public static <T> Object getData(String filtr, T obj) throws Exception {
Field[] fields = obj.getClass().getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
if (f.getName().equals(filtr)) {
return Convert.convert(String.class, f.get(obj));
}
if (Collection.class.isAssignableFrom(f.getType())) {
Type t = f.getGenericType();
if (t instanceof ParameterizedType) {
//获取对象list属性的class
Class clazz = f.get(obj).getClass();
Method m = clazz.getDeclaredMethod("size");
int size = (Integer) m.invoke(f.get(obj));
for (int i = 0; i < size; i++) {
//获取list属性的get方法
Method getM = clazz.getDeclaredMethod("get", int.class);
//调用get方法获取list中的对象
Object u = getM.invoke(f.get(obj), i);
//测试是否能够获取到list中对象的属性的值
Field[] uf = u.getClass().getDeclaredFields();
for (Field fu : uf) {
if (!fu.isAccessible()) {
fu.setAccessible(true);
}
if (fu.getName().equals(filtr)) {
return Convert.convert(String.class, fu.get(u));
}
}
return getData(filtr, u);
}
}
}
}
return null;
}
}