反射运用之Object和Map转换
2018-12-02 15:55
309 查看
包含了属性名称和注解成员作为key两种Map
Object=>Map
package util; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class FieldMapAssembler { /** * 将传入的对象转换为属性名称到值的映射 * @param srcObj 对象 * @return 属性名称到值的映射 */ public static <T> Map<String,Object> assembleFieldNameMapByObject(T srcObj) { Map<String,Object> targetMap = new HashMap<>(); try { Class<?> srcClazz=srcObj.getClass(); Field[] fields = srcClazz.getDeclaredFields(); for(Field field:fields) { field.setAccessible(true); String fieldName = field.getName(); Object fieldValue=field.get(srcObj); targetMap.put(fieldName, fieldValue); } return targetMap; } catch (IllegalAccessException | SecurityException e) { e.printStackTrace(); return null; } } /** * 将传入的对象转换为属性数据库名称到值的映射 * @param srcObj 对象 * @return 属性数据库名称到值的映射 */ public static <T> Map<String,Object> assembleDbNameMapByObject(T srcObj) { Map<String,Object> targetMap = new HashMap<>(); try { Class<?> srcClazz=srcObj.getClass(); Field[] fields = srcClazz.getDeclaredFields(); for(Field field:fields) { field.setAccessible(true); FieldAnnotation fieldAnno = field.getAnnotation(FieldAnnotation.class); if(fieldAnno==null) continue; String dbFieldName = fieldAnno.dbName(); if(dbFieldName==null) continue; String fieldName = field.getName(); Object fieldValue=field.get(srcObj); targetMap.put(fieldName, fieldValue); } return targetMap; } catch (IllegalAccessException | SecurityException e) { e.printStackTrace(); return null; } } }
Map=>Object
package util; import java.lang.reflect.Field; import java.util.Map; public class ObjectAssembler{ /** * 将传入的MAP转换为对象 * @param fieldNameToValueMap 属性名称到值的映射 * @param targetClazz 目标Class对象 * @return 目标对象 */ public static <T> T assembleByFieldNameMap(Map<String,Object> fieldNameToValueMap,Class<T> targetClazz) { try { T targetObj=targetClazz.newInstance(); Field[] fields = targetClazz.getDeclaredFields(); for(Field field:fields) { field.setAccessible(true); String fieldName = field.getName(); Object fieldValue=fieldNameToValueMap.get(fieldName); if(fieldValue!=null) { field.set(targetObj, fieldValue); } } return targetObj; } catch (InstantiationException | IllegalAccessException | SecurityException e) { e.printStackTrace(); return null; } } /** * 将传入的MAP转换为对象 * @param dbNameToValueMap 属性在数据中名称到值的映射 * @param targetClazz 目标Class对象 * @return 目标对象 */ public static <T> T assembleByDbAnnotationNameMap(Map<String,Object> dbNameToValueMap,Class<T> targetClazz) { try { T targetObj=targetClazz.newInstance(); Field[] fields = targetClazz.getDeclaredFields(); for(Field field:fields) { field.setAccessible(true); FieldAnnotation fieldAnno = field.getAnnotation(FieldAnnotation.class); if(fieldAnno==null) continue; String dbFieldName = fieldAnno.dbName(); if(dbFieldName==null) continue; Object fieldValue=dbNameToValueMap.get(dbFieldName); if(fieldValue==null) continue; field.set(targetObj, fieldValue); } return targetObj; } catch (InstantiationException | IllegalAccessException | SecurityException e) { e.printStackTrace(); return null; } } }
注解
package util; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Target; @Retention(RUNTIME) @Target( {ElementType.FIELD} ) public @interface FieldAnnotation { String dbName(); }
相关文章推荐
- 利用java反射,将map转换为指定的Object类型
- 简单的java 反射机制实践 map 与object对象的转换
- java 用反射简单应用,将Object简单转换成map
- java 使用反射转换对象 Object to Map
- java 用反射简单应用,将Object简单转换成map
- java 使用反射转换对象 Object to Map
- jdbc查询返回来的List<Map<String, Object>> 转换成List<Users>
- java实现Object和Map之间的转换3种方式
- JSONObject.fromObject 转换JSON字符串Map的问题
- 通过java的反射机制实现Map、JavaBean、JSON的相互转换工具类
- JSONObject与Map的转换以及JSONArray与List的转换
- java和js中JSONObject,JSONArray,Map,String之间转换——持续更新中
- java和js中JSONObject,JSONArray,Map,String之间转换
- 将Object对象转换成Map 属性名和值的形式
- json对象、json格式字符串、java对象【使用此net.sf.json.JSONObject将java对象[比如数组集合Map、Map扩展]转换成json格式字符串】
- java中Array/List/Map/Object与Json互相转换详解
- 利用Java反射实现普通对象到JSONObject的转换
- ArrayList<Object> 转换为Map<Integer, ArrayList<String>>
- Map与Object之间的转换
- Java后台常见String、Map、JSONObject,JSONArray之间的转换