利用反射機制,實現類似類之間的賦值操做

直接貼代碼吧。。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;
	}
}
相關文章
相關標籤/搜索