反射操作对象的一个实例 (hibernate原理基础)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 反射操作对象的一个实例 (hibernate原理基础)

反射操作对象的一个实例 (hibernate原理基础)

 2013/10/27 15:57:40  alleni123  程序员俱乐部  我要评论(0)
  • 摘要:packagecom.lj.reflectionTester;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;publicclassTester{//该方法实现对Customer对象的拷贝操作publicObjectcopy(Objectobj)throwsNoSuchMethodException
  • 标签:一个 反射 实例 操作 hibernate
class="java"> package com.lj.reflectionTester;

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

public class Tester
{
	//该方法实现对Customer对象的拷贝操作
	public Object copy( Object obj) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		
		Class<?> clz=obj.getClass();
		
	 //	Constructor cons=clz.getConstructor(new Class[]{String.class, int.class});
		
	 //	Object object=cons.newInstance(new Object[]{"hello",23});
		
	 	
		Object objectCopy = clz.getConstructor(new Class[]{}).newInstance(new Object[]{});
		
		//获得对象的所有成员变量
		Field[] fields=clz.getDeclaredFields();
		int i=0;
		for(Field field:fields){
			
			 
			String name=field.getName();
		 
			
			String firstLetter=name.substring(0, 1).toUpperCase();
			
			String getMethodName="get"+firstLetter+name.substring(1, name.length());
			String setMethodName="set"+firstLetter+name.substring(1, name.length());
		 
			
			Method getMethod=clz.getMethod(getMethodName, new Class[]{});
			Method setMethod=clz.getMethod(setMethodName, new Class[]{field.getType()});
		 
			
			Object value=getMethod.invoke(obj, new Object[]{});
			
			setMethod.invoke(objectCopy, new Object[]{value});
			
			System.out.println(value);
		}
		
		return objectCopy;
		
		
		
	}
	
	
	public static void main(String[] args) throws Exception
	{
		Tester tester=new Tester();
		
		Customer c=(Customer) tester.copy(new Customer("li",25));
		System.out.println(c.toString());
		
		 
		
	}
}




=====================Customer类===================


package com.lj.reflectionTester;

public class Customer
{
	private Long id;
	
	private String name;
	private int age;
	public Long getId()
	{
		return id;
	}
	public void setId(Long id)
	{
		this.id = id;
	}
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age = age;
	}
	
	
	
	public Customer(){
		
	}
	
	public Customer(String name, int age){
		this.name=name;
		this.age=age;
	}
	@Override
	public String toString()
	{
		return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	

}
上一篇: struts2的一种特殊的提交方法 下一篇: 没有下一篇了!
发表评论
用户名: 匿名