java 反射之获取泛型对象的所有字段与对应的值(包括父类的)
2024-08-23 21:36:15
上代码:
public static void main(String[] args) throws IntrospectionException {
SysUser obj = new SysUser();
obj.setId(1L);
obj.setUserName("测试");
obj.setCreatedDate(LocalDateTime.now()); Class<?> clazz = SysUser.class;
Field[] tableFields = clazz.getDeclaredFields();
Class<?> superClazz = clazz.getSuperclass();
if (superClazz.equals(Object.class)) {
System.out.println("没有父类");
} else {
Field[] tableSuperFields = superClazz.getDeclaredFields();
Field[] superFields = new Field[tableFields.length + tableSuperFields.length];
System.arraycopy(tableFields, 0, superFields, 0, tableFields.length);
System.arraycopy(tableSuperFields, 0, superFields, tableFields.length, tableSuperFields.length);
Field[] allFields = getSuperClassFields(superFields, superClazz);
for (int i = 0; i < allFields.length; i++) {
PropertyDescriptor pd = new PropertyDescriptor(allFields[i].getName(), clazz);
Method getMethod = pd.getReadMethod();//获得get方法
Object fieldValue = ReflectionUtils.invokeMethod(getMethod, obj);
if(fieldValue == null){
continue;
} System.out.println(allFields[i].getName() + "的值:" + fieldValue.toString());
}
}
}
//获取父类的所有字段
private static Field[] getSuperClassFields(Field[] tableFields, Class<?> clazz) {
Class<?> superClazz = clazz.getSuperclass();
if (superClazz.equals(Object.class)) {
return tableFields;
}
Field[] tableSuperFields = superClazz.getDeclaredFields(); Field[] c = new Field[tableFields.length + tableSuperFields.length];
System.arraycopy(tableFields, 0, c, 0, tableFields.length);
System.arraycopy(tableSuperFields, 0, c, tableFields.length, tableSuperFields.length);
getSuperClassFields(c, superClazz);
return c;
}
输出结果:
最新文章
- 【python之路4】循环语句之while
- [javascript] 判断 iframe 是否加载完成
- PHP----Ajax异步请求
- 利用phpexcel把excel导入数据库和数据库导出excel实现
- 初学MFC
- Hibernate+Struts2完成修改数据功能
- hibernate sql查询
- android Graphics(四):canvas变换与操作
- Linux 挂载NTFS文件系统
- vue学习笔记 实例(二)
- 输入法无法切换 win10
- Django学习笔记(二)视图函数
- Windows10 小闹钟
- nice team小组出山啦!(第二次会议)
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action
- 【Unity Shader】五、Shader纹理映射,及纹理的缩放和偏移
- 把a文件删除b文件中的相同的行
- openresty websocket 使用
- Python:列表中,增加元素、删除元素、切片、其它
- aerospike(2)-java client