java中怎么将objet转换成map_java 用反射简单应用,将Object简单转换成map

package com.appdev.bsf.server.common;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

public class ObjectDynamicCreator {

/**

* 返回由对象的属性为key,值为map的value的Map集合

*

* @param obj

* Object

* @return mapValue Map

* @throws Exception

*/

public static Map getFieldVlaue(Object obj) throws Exception {

Map mapValue = new HashMap();

Class> cls = obj.getClass();

Field[] fields = cls.getDeclaredFields();

for (Field field : fields) {

String name = field.getName();

String strGet = "get" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());

Method methodGet = cls.getDeclaredMethod(strGet);

Object object = methodGet.invoke(obj);

String value = object != null ? object.toString() : "";

mapValue.put(name, value);

}

return mapValue;

}

/**

* 返回由Map的key对属性,value对应值组成的对应

*

* @param map

* Map

* @param cls

* Class

* @return obj Object

* @throws Exception

*/

public static Object setFieldValue(Map map, Class> cls) throws Exception {

Field[] fields = cls.getDeclaredFields();

Object obj = cls.newInstance();

for (Field field : fields) {

Class> clsType = field.getType();

String name = field.getName();

String strSet = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());

Method methodSet = cls.getDeclaredMethod(strSet, clsType);

if (map.containsKey(name)) {

Object objValue = typeConversion(clsType, map.get(name));

methodSet.invoke(obj, objValue);

}

}

return obj;

}

/**

* 将Map里面的部分值通过反射设置到已有对象里去

*

* @param obj

* Object

* @param data

* Map

* @return obj Object

* @throws Exception

*/

public static Object setObjectFileValue(Object obj, Map data) throws Exception {

Class> cls = obj.getClass();

Field[] fields = cls.getDeclaredFields();

for (Field field : fields) {

Class> clsType = field.getType();

String name = field.getName();

String strSet = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());

Method methodSet = cls.getDeclaredMethod(strSet, clsType);

if (data.containsKey(name)) {

Object objValue = typeConversion(clsType, data.get(name));

methodSet.invoke(obj, objValue);

}

}

return obj;

}

/**

* 把对象的值用Map对应装起来

*

* @param map

* Map

* @param obj

* Object

* @return 与对象属性对应的Map Map

*/

public static Map compareMap(Map map, Object obj) {

Map mapValue = new HashMap();

Field[] fields = obj.getClass().getDeclaredFields();

for (Field field : fields) {

String name = field.getName();

if (map.containsKey(name)) {

mapValue.put(name, map.get(name));

}

}

return mapValue;

}

/**

* 把临时对象的值复制到持久化对象上

*

* @param oldObject

* Object 持久化对象

* @param newObject

* Object 临时对象

* @return 持久化对象

* @throws Exception

*/

public static Object mergedObject(Object oldObject, Object newObject) throws Exception {

Class> cls = newObject.getClass();

Field[] fields = cls.getDeclaredFields();

for (Field field : fields) {

Class> clsType = field.getType();

String name = field.getName();

String method = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());

String strGet = "get" + method;

Method methodGet = cls.getDeclaredMethod(strGet);

Object object = methodGet.invoke(newObject);

if (object != null) {

String strSet = "set" + method;

Method methodSet = cls.getDeclaredMethod(strSet, clsType);

Object objValue = typeConversion(clsType, object.toString());

methodSet.invoke(oldObject, objValue);

}

}

return oldObject;

}

public static Object typeConversion(Class> cls, String str) {

Object obj = null;

String nameType = cls.getSimpleName();

if ("Integer".equals(nameType)) {

obj = Integer.valueOf(str);

}

if ("String".equals(nameType)) {

obj = str;

}

if ("Float".equals(nameType)) {

obj = Float.valueOf(str);

}

if ("Double".equals(nameType)) {

obj = Double.valueOf(str);

}

if ("Boolean".equals(nameType)) {

obj = Boolean.valueOf(str);

}

if ("Long".equals(nameType)) {

obj = Long.valueOf(str);

}

if ("Short".equals(nameType)) {

obj = Short.valueOf(str);

}

if ("Character".equals(nameType)) {

obj = str.charAt(1);

}

return obj;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值