zoukankan      html  css  js  c++  java
  • 2018.5.11 Java利用反射实现对象克隆

    package com.lanqiao.demo;
    
    /**
     * 创建人
     * @author qichunlin
     *
     */
    public class Person {
    	private int id;
    	private String name;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	//有参构造方法
    	public Person(String name,int id) {
    		super();
    		this.id = id;
    		this.name = name;
    	}
    	
    	//无参构造方法
    	public Person() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	
    	
    }
    
    package com.lanqiao.demo;
    /**
     * 复制对象
     * @author qichunlin
     *
     */
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class ReflectPerson {
    	public Object copy(Object object) throws Exception{
    		//加载类
    		Class c = object.getClass();
    		//获取类中的构造方法
    		Constructor ct = c.getConstructor(new Class[] {});
    		//在构造方法中传值
    		Object obj = ct.newInstance(new Object[] {});
    		
    		
    		//获取所有  属性  返回数组
    		Field[] f = c.getDeclaredFields();
    		for(Field field : f) {
    			String name = field.getName();
    			//System.out.println("a"+name);
    			//截取
    			String firstLetter = name.substring(0, 1).toUpperCase();
    			String getMethodName = "get"+firstLetter+name.substring(1);
    			String setMethodName = "set"+firstLetter+name.substring(1);
    			//获取无参构造方法
    			Method getMethod = c.getMethod(getMethodName, new Class[] {});
    			Method setMethod = c.getMethod(setMethodName, new Class[] {field.getType()});
    			//执行赋值无参构造方法
    			Object value = getMethod.invoke(object, new Object[] {});
    			System.out.println(value);
    			//执行赋值有参构造方法
    			setMethod.invoke(obj, new Object[] {value});
    		}
    		
    		return obj;
    		
    	}
    	
    }
    
    
    package com.lanqiao.demo;
    
    import java.lang.reflect.InvocationTargetException;
    
    /**
     * @author qichunlin
     *
     */
    public class Test {
    	public static void main(String[] args) throws Exception,InvocationTargetException{
    		ReflectPerson rp = new ReflectPerson();
    		Person p = new Person("Legend",22);
    		Person obj = (Person)rp.copy(p);
    		System.out.println(obj.getName()+"	"+obj.getId());
    	}
    	
    }
    
  • 相关阅读:
    吐槽下博客园
    关于爱情
    CCD 驱动 时序理解
    写在博客的第一天
    51单片机最小系统
    swing之登陆功能
    TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?
    TDSQL | 深度解读HTAP系统的问题与主义之争
    硬核干货!TDSQL全局一致性读技术详解|
    35w奖金池,腾讯云TDSQL精英挑战赛等你来战!
  • 原文地址:https://www.cnblogs.com/qichunlin/p/8992978.html
Copyright © 2011-2022 走看看