Java 功能篇之 Object 转Map解析

符号 阅读:213 2021-03-31 12:24:14 评论:0

工具类源码:

import java.lang.reflect.Field; 
import java.util.HashMap; 
import java.util.Map; 
 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
public class MapTransPojo { 
public static final Logger log = LoggerFactory.getLogger(MapTransPojo.class); 
	 
	public static Map<String,Object> PojoTransMap(Object obj){ 
		 Map<String, Object> map = new HashMap<String, Object>(); 
		 if (obj == null) { 
			 return map; 
		 } 
		 // 获取当前类属性 
		 Class clazz = obj.getClass(); 
		 Field[] fields = clazz.getDeclaredFields(); 
		 try { 
			 for (Field field : fields) { 
				 field.setAccessible(true); 
				 if(field.get(obj) != null){ 
					 map.put(field.getName(), field.get(obj));					  
				 } 
			 } 
		 } catch (Exception e) { 
			 log.error("MapTransPojo init error", e); 
		 }	 
		return map; 
	} 
	 
	public static Map<String,Object> PojoTransMapSimple(Object obj){ 
		 Map<String, Object> map = new HashMap<String, Object>(); 
		 if (obj == null) { 
			 return map; 
		 } 
		 Class clazz = obj.getClass(); 
		 Field[] fields = clazz.getDeclaredFields(); 
		  
		 try { 
			 for (Field field : fields) { 
				 field.setAccessible(true); 
				 if(field.get(obj) != null){ 
					 map.put(field.getName(), SimpleTypeConverterUtil.convertIfNecessary(field.get(obj), field.getType())); 
				 } 
			 } 
		 } catch (Exception e) { 
			 e.printStackTrace(); 
		 } 
		return map; 
	} 
 
/** 
	 * Map转实体类 
	 * @param map 需要初始化的数据,key字段必须与实体类的成员名字一样,否则赋值为空 
	 * @param entity  需要转化成的实体类 
	 * @return 
	 */ 
	public static <T> T mapToEntity(Map<String, Object> map, Class<T> entity) { 
		T t = null; 
		try { 
			t = entity.newInstance(); 
			for(Field field : entity.getDeclaredFields()) { 
				if (map.containsKey(field.getName())) { 
					boolean flag = field.isAccessible(); 
		            field.setAccessible(true); 
		            Object object = map.get(field.getName()); 
		            if (object!= null && field.getType().isAssignableFrom(object.getClass())) { 
		            	 field.set(t, object); 
					} 
		            field.setAccessible(flag); 
				} 
			} 
			return t; 
		} catch (InstantiationException e) { 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} catch (IllegalAccessException e) { 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 
		return t; 
	} 
 
}

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们