反照 Class Method Field 初步使用

反射 Class Method Field 初步使用
代码小例子:
package com.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest
{
	// object's copy
	public static Object copy(Object obj) throws Exception, Exception
	{
		Class<? extends Object> clazz = obj.getClass();
		// Constructor con = clazz.getConstructor(new
		// Class[]{int.class,String.class});
		Constructor con = clazz.getConstructor();

		// Object o = con.newInstance(new Object[]{1,"2"});
		Object o = con.newInstance(new Object[] {});
		Field[] field = clazz.getDeclaredFields();
		for (Field field2 : field)
		{
			String name = field2.getName();
			
			String firstLetter = name.substring(0, 1).toUpperCase();
			
			String getMethodName = "get" + firstLetter + name.substring(1);
			String setMethodName = "set" + firstLetter + name.substring(1);
			
			Method getMethod = clazz.getMethod(getMethodName, new Class[] {});
			Method setMethod = clazz.getMethod(setMethodName,
					new Class[] { field2.getType() });
			
			Object value = getMethod.invoke(obj, new Object[] {});
			setMethod.invoke(o, new Object[] { value });

			// System.out.println(field2);
			System.out.println(getMethodName);
			System.out.println(setMethodName);
		}
		// System.out.println(o);
		return o;

	}

	public static void main(String[] args) throws Exception
	{
           People p = new People();
           p.setAge(1);
           p.setName("liu");
           p.setHight("66kg");
           
	People p2 = 	(People) ReflectTest.copy(p);
	
	System.out.println(p2.getAge());
	System.out.println(p2.getHight());
	System.out.println(p2.getName());
	
	
	}

}

class People
{
	private int age;

	private String name;

	private String hight;

	public People()
	{
	}

	public People(int age, String name)
	{
		this.age = age;

		this.name = name;
	}

	public int getAge()
	{
		return age;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getHight()
	{
		return hight;
	}

	public void setHight(String hight)
	{
		this.hight = hight;
	}

}