ReflectionUtils

public class ReflectionUtils {

	private ReflectionUtils() {

	}

	private static Logger logger = Logger.getLogger(ReflectionUtils.class);

	public static void copyProperties(Map<String, String> sourceMap, Object targetObject) {

		if (CollectionUtils.isEmpty(sourceMap)) {
			return;
		}

		Class<? extends Object> clazz = targetObject.getClass();

	    /**
		 * 获取实体类的所有属性信息,返回Field数组;
		 * 
		 * getFields()只能获取public的字段,包括父类的;
		 * getDeclaredFields()只能获取自己声明的各种字段,包括public,protected,private,但不包括父类的申明字段;
		 **/
		Field[] fields = clazz.getDeclaredFields();
		Map<String, Field> fieldMap = new HashMap<String, Field>();
		for (Field field : fields) {
			fieldMap.put(field.getName(), field);
		}

		try {

			for (Entry<String, String> entry : sourceMap.entrySet()) {

				if (fieldMap.containsKey(entry.getKey())) {

					// 获取指定字段
					Field field = fieldMap.get(entry.getKey());

					field.setAccessible(true);

					Class<?> fieldType = field.getType();

					logger.debug("Key:" + entry.getKey() + " , Type:" + fieldType + " , Value:" + entry.getValue());

					if (String.class == fieldType) {
						field.set(targetObject, entry.getValue());

					} else if (Boolean.class == fieldType) {

						field.setBoolean(targetObject, Boolean.valueOf(entry.getValue()));

					} else if (Integer.class == fieldType) {
						field.set(targetObject, 10);
					} else if (Double.class == fieldType) {
						field.set(targetObject, Double.valueOf(entry.getValue()));
					} else if (Long.class == fieldType) {
						field.set(targetObject, Long.valueOf(entry.getValue()));
					} else if (BigDecimal.class == fieldType) {
						if (StringUtils.isNotBlank(entry.getValue())) {
							field.set(targetObject, new BigDecimal(entry.getValue()));
						}
					} else if (Float.class == fieldType) {
						field.set(targetObject, Float.valueOf(entry.getValue()));

					} else {
						logger.warn("****** 不支持的数据类型:" + entry.getKey() + " : " + fieldType);
					}

				}

			}

		} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
			logger.error(e);
		}
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值