1、map转对象; 主要思路,将map中的key-value取出来,然后和给定的对象去匹配 public static T mapToBean(Map map, Class clazz) throws Exception {Object
1、map转对象;
主要思路,将map中的key-value取出来,然后和给定的对象去匹配
public static T mapToBean(Map map, Class> clazz) throws Exception {Object obj = clazz.newInstance();if (map != null && !map.isEmpty() && map.size() > 0) {for (Map.Entry entry : map.entrySet()) {String propertyName = entry.geTKEy(); // 属性名Object value = entry.getValue();// 属性值String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);Field field = getClassField(clazz, propertyName);//获取和map的key匹配的属性名称if (field == null){continue;}Class> fieldTypeClass = field.getType();value = convertValType(value, fieldTypeClass);try {clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);} catch (NoSuchMethodException e) {e.printStackTrace();}}}return (T) obj;}private static Field getClassField(Class> clazz, String fieldName) {if (Object.class.getName().equals(clazz.getName())) {return null;}Field[] declaredFields = clazz.getDeclaredFields();for (Field field : declaredFields) {if (field.getName().equals(fieldName)) {return field;}}Class> superClass = clazz.getSuperclass();//如果该类还有父类,将父类对象中的字段也取出if (superClass != null) {//递归获取return getClassField(superClass, fieldName);}return null;}private static Object convertValType(Object value, Class> fieldTypeClass) {Object retVal = null;if (Long.class.getName().equals(fieldTypeClass.getName())|| long.class.getName().equals(fieldTypeClass.getName())) {retVal = Long.parseLong(value.toString());} else if (Integer.class.getName().equals(fieldTypeClass.getName())|| int.class.getName().equals(fieldTypeClass.getName())) {retVal = Integer.parseInt(value.toString());} else if (Float.class.getName().equals(fieldTypeClass.getName())|| float.class.getName().equals(fieldTypeClass.getName())) {retVal = Float.parseFloat(value.toString());} else if (Double.class.getName().equals(fieldTypeClass.getName())|| double.class.getName().equals(fieldTypeClass.getName())) {retVal = Double.parseDouble(value.toString());} else {retVal = value;}return retVal;}
2、对象转map,
思路,同上述的分析类似,这不过这里需要反过来,给定一个待转化的实体类,通过反射,将实体类中的字段名称和字段值获取到,然后一一设置到map的key-value中,下面看代码,
private static Map objToMap(Object obj) {Map map = new HashMap();Field[] fields = obj.getClass().getDeclaredFields();// 获取f对象对应类中的所有属性域for (int i = 0, len = fields.length; i < len; i++) {String varName = fields[i].getName();varName = varName.toLowerCase();// 将key置为小写,默认为对象的属性try {boolean accessFlag = fields[i].isAccessible();// 获取原来的访问控制权限fields[i].setAccessible(true);// 修改访问控制权限Object o = fields[i].get(obj);// 获取在对象f中属性fields[i]对应的对象中的变量if (o != null){map.put(varName, o.toString());}fields[i].setAccessible(accessFlag);// 恢复访问控制权限} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}return map;}
来源地址:https://blog.csdn.net/weixin_50391597/article/details/129063508
--结束END--
本文标题: Java中 实体类与Map互转
本文链接: https://www.lsjlt.com/news/428796.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0