[ java反射 ] 克隆对象的属性

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;

public class zkClone {
    private static Logger logger = Logger.getLogger(zkClone.class);
    //克隆对象存在的属性值
    public static void cloneField(Object target,Object instance){
        
        Map<String, Object> invokeMap = new HashMap<String, Object>();
        Method[] targetMth = target.getClass().getDeclaredMethods();
        Method[] instanceMth = instance.getClass().getDeclaredMethods();
        try {
            for(int i=0;i<instanceMth.length;i++){
                Method m = instanceMth[i];
                if(m.getName().indexOf("get")!=-1){
                    Object result = m.invoke(instance);
                    if(result!=null){
                        invokeMap.put("set"+m.getName().substring(3), result);
                    }
                }
            }
            
            for(int j=0;j<targetMth.length;j++){
                Method m = targetMth[j];
                Object args = invokeMap.get(m.getName());
                if(args!=null){
                    logger.info("调用方法  => "+m.getName()+" 值 => "+args.toString());
                    m.invoke(target, args);
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

猜你喜欢

转载自www.cnblogs.com/przone/p/9075217.html