Java中有没有啥办法可以将两个类的属性值映射?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中有没有啥办法可以将两个类的属性值映射?相关的知识,希望对你有一定的参考价值。

在Java中,有两个JavaBean,是实体。
两个实体里属性名全部或部分匹配。
现在一个Bean中有值,有没有什么办法可以将这个Bean中的值直接赋给另一个Bean?直接,现成的办法,JDK,Spring,或者Struts自带的方法等等。

如果没有,请利用Java反射写一个通用类。
请加注释,如果好用,可以补分,
谢谢

参考技术A import org.apache.commons.beanutils.BeanUtils;

public static void copy(Object newObject, Object oldObject)

try

BeanUtils.copyProperties(newObject, oldObject);

catch (IllegalAccessException e)

e.printStackTrace();

catch (InvocationTargetException e)

e.printStackTrace();



去http://commons.apache.org/beanutils/下载commons-beanutils.jar本回答被提问者采纳
参考技术B 用继程不可以吗?
把有值的那个javaBean继程那个无值的.利用多态就行了吧.

Java开发数据类型转换

Java实体类转为Map

注意:这个小工具类可以将Java对象的直接值属性 映射到map,但是未能映射子对象结构的全部属性(这正是我所需要的),以及未能映射obj继承自父类的属性,继承属性需要映射到map的需要手动添加。

public class MapUtils

   public static Map<String,Object> ConvertObjToMap(Object obj)
		  Map<String,Object> reMap = new HashMap<String,Object>();
		  if (obj == null) 
		   return null;
		  Field[] fields = obj.getClass().getDeclaredFields();
		  try 
		   for(int i=0;i<fields.length;i++)
		    try 
		     Field f = obj.getClass().getDeclaredField(fields[i].getName());
		     f.setAccessible(true);
		           Object o = f.get(obj);
		           reMap.put(fields[i].getName(), o);
		     catch (NoSuchFieldException e) 
		     // TODO Auto-generated catch block
		     e.printStackTrace();
		     catch (IllegalArgumentException e) 
		     // TODO Auto-generated catch block
		     e.printStackTrace();
		     catch (IllegalAccessException e) 
		     // TODO Auto-generated catch block
		     e.printStackTrace();
		    
		   
		   catch (SecurityException e) 
		   // TODO Auto-generated catch block
		   e.printStackTrace();
		   
		  return reMap;
		 


测试调用:其中objTemp是Java 类:

//调用实例:
Map<String, Object> mapTemp = MapUtils.object2Map(objTemp);

Java Map转为JsonObject

我使用的fastjson,但是由于fastjson 直接调用 JSONObject.parseObject(javaObject)将Java对象转为json的过程中,如果javaObject嵌套子对象,此时转换结果不友好,我就先中转将对象转为了Map 再转json(有点啰嗦。)

JSONObject jsonObject = new JSONObject(mapTemp);

Json转为Java实体对象

public class MyJavaClass

    //TODO 


//调用实例:
String jsonStr = "";
MyJavaClass myjavaClass = JSON.parseObject(jsonStr, MyJavaClass.class);

JSONObject转为实体类

如下,我使用fastjson,将JSONObject转为Java类 MyJavaClass 的写法格式:

public class MyJavaClass

    //TODO


void test()

   JSONObject jsonObj;
   MyJavaClass info = JSONObject.toJavaObject(jsonObj,MyJavaClass.class);


JSONObject 转为 Map:

如下是将myJsonObj的JSONObject转为Map<String,Object>

JSONObject myJsonObj = null;//TODO 
Map<String, Object> itemMap = JSONObject.toJavaObject(myJsonObj, Map.class);

以上是关于Java中有没有啥办法可以将两个类的属性值映射?的主要内容,如果未能解决你的问题,请参考以下文章

java中的枚举到底有啥作用?

JAVA对象具有状态,行为,还有啥属性?

JAVA对象具有状态,行为,还有啥属性

以实例说明啥是“对象—关系映射”?

有没有办法使用 Dapper 将列名映射到我的实体的属性?

java反射机制动态获取hibernate懒加载对象