已解决
Java之反射获取和赋值字段
来自网友在路上 11128112提问 提问时间:2023-11-21 18:25:52阅读次数: 112
最佳答案 问答题库1128位专家为你答疑解惑
在Java中,反射能够使得代码更加通用,往往用于工具类中。
但常常我们在获取或者赋值反射的属性时,会出现没有赋值成功的结果,往往是由于这个属性在父级中而导致的,这个时候我们就不能用getDeclaredField
方法单独获取字段,而是循环遍历所有的父级取字段。
下面提供获取所有属性方法(包括父级):
/*** description: 从当前以及父类中获取全部字段** @param clazz 属性所在类* @return java.lang.reflect.Field*/
public static List<Field> getFieldByCurrentAndSuper(Class<?> clazz) {List<Field> fields = new ArrayList<>();getFieldByCurrentAndSuper(clazz, fields);return fields;
}/*** description: 从当前以及父类中获取全部字段** @param clazz 属性所在类* @return java.lang.reflect.Field*/
private static List<Field> getFieldByCurrentAndSuper(Class<?> clazz, List<Field> fields) {Field[] declaredFields = clazz.getDeclaredFields();fields.addAll(Arrays.asList(declaredFields));if (!clazz.equals(Object.class)) {return getFieldByCurrentAndSuper(clazz.getSuperclass(), fields);}return fields;
}
我们拿到泛型的Class后,就可以直接调用getFieldByCurrentAndSuper
方法来获取所有属性,然后遍历对属性操作,如下:
/*** 深度赋值属性*/
private static void setField(Class<?> clazz, String userTenantCode, Object arg) throws IllegalAccessException {try {List<Field> fieldList = getFieldByCurrentAndSuper(clazz);if (fieldList.size() > 0) {for (Field field : fieldList) {if (field.getName().equals("tenantCode")) {// 设置可访问私有属性field.setAccessible(true);field.set(arg, userTenantCode);}}}} catch (Exception ignored) {}
}
查看全文
99%的人还看了
相似问题
- SpringBoot使用ObjectMapper之Long和BigDemical类型的属性字符串处理,防止前端丢失数值精度
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- QT中样式表常见属性与颜色的设置与应用
- Java继承中的属性名相同但是类型不同的情况
- C#开发的OpenRA游戏之属性QuantizeFacingsFromSequence(7)
- XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
- CSS-列表属性篇
- CSS 文本属性篇
- 计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法
- JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素
猜你感兴趣
版权申明
本文"Java之反射获取和赋值字段":http://eshow365.cn/6-41458-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 静态文件鉴权
- 下一篇: 关于sqlModel 实现查询表单入参空值和模糊匹配一次性查询