map自动转换为对象

时间:2025-02-16 10:44:42
/** * 从map获取对象,对map中key去除下划线全替换为大写字母,匹配时对象名称全 * @param map * @param clazzpath 类的全限定类名reference * @return */ public static Object getObjectFromMap(Map<String,Object> map,String clazzpath) { map = formatMap(map); try { Class c = Class.forName(clazzpath); Constructor constructor = c.getConstructor(); Object object = constructor.newInstance(); Field[] declaredFields = c.getDeclaredFields(); // 遍历类中定义的所有变量 for (Field declaredField : declaredFields) { // 获取变量名.去除下划线 String name = declaredField.getName(); // 如果map中存在变量名去除下划线后的大写参数则进行赋值 String nameFormat = name.replaceAll("_","").toUpperCase(); if (map.containsKey(nameFormat)) { // 取消访问检查,否则私有变量无法赋值 declaredField.setAccessible(true); Object o = map.get(nameFormat); // 判断是否是数字类型 boolean numeric = isNumeric(o); if (numeric) { declaredField.set(object, String.valueOf(o)); } else { declaredField.set(object, o); } } } return object; } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { e.printStackTrace(); } return null; } /** * 判断对象是否是数字 * @param obj * @return */ public static boolean isNumeric (Object obj){ if(obj instanceof BigDecimal) { return true; } String str = String.valueOf(obj); for (int i = 0;i < str.length();i++) { if (!Character.isDigit(str.charAt(i))){ return false; } } return true; }