利用反射机制,实现相似类之间的赋值操作

本文介绍了一种使用Java反射机制将一个源对象转换为目标对象的方法。该方法要求目标类提供无参数构造函数,并通过反射设置源对象和目标对象中相同名称字段的值。

直接贴代码吧。。

package com.java8;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 将 src Object 通过java反射机制转化为target Object
 * @author stupidwolf
 * 
 */
public class CastSrcObjToTargObj {
	/**
	 * 
	 * @param src 源类 实例
	 * @param targetObjectClassName 将被转化的目的类,需提供具体的 class name(例如 "aaa.bb.c.ClassName"),
	 * 以及该类需要提供一个无参的构造方法 ;
	 * @return 如果能够转换则返回经反射处理后得到的目的类的实例,否则返回null
	 */
	public static Object castSrcObjToTargObj (Object srcInstance, String targetObjectClassName)  {
		
		Class<?> targetClazz = null;
		Object targetInstance = null;
		try {
			targetClazz = Class.forName(targetObjectClassName);
			targetInstance = targetClazz.newInstance();
			Field[] srcFields = srcInstance.getClass().getDeclaredFields();
			Field[] targFields = targetInstance.getClass().getDeclaredFields();
			for (int i = 0, srcLength = srcFields.length; i < srcLength; i ++) {
				srcFields[i].setAccessible(true);
				
				for (int j = 0, targLength = targFields.length; j < targLength; j ++ ) {
					if (targFields[j].getName().equals(srcFields[i].getName()) && 
							!Modifier.isFinal(targFields[i].getModifiers())) {
						targFields[j].setAccessible(true);
						
						targFields[j].set(targetInstance, 
								srcFields[i].get(srcInstance)
								);
						break;
					}
				}
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		
		return targetInstance;
	}
}


转载于:https://my.oschina.net/u/2301987/blog/637756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值