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

直接贴代码吧。。

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;
	}
}


你可能感兴趣的:(java,反射,复用,不同类相同属性之间赋值)