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());
    	}
    	
    }
    
  • 相关阅读:
    mojo 接口示例
    MojoliciousLite: 实时的web框架 概述
    接口返回json
    centos 6.7 perl 版本 This is perl 5, version 22 安装DBI DBD
    centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
    商业智能改变汽车行业
    商业智能改变汽车行业
    读MBA经历回顾(上)目的决定手段——北漂18年(48)
    perl 升级到5.20版本
    Group Commit of Binary Log
  • 原文地址:https://www.cnblogs.com/qichunlin/p/8992978.html
Copyright © 2011-2022 走看看