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());
    	}
    	
    }
    
  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/qichunlin/p/8992978.html
Copyright © 2011-2022 走看看