1

来源:互联网 发布:手机淘宝怎么登不上 编辑:程序博客网 时间:2024/06/06 13:25
package com.haizhitao.reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectTester{//该方法实现对Customer对象的拷贝操作public Object copy(Object object) throws Exception{Class<?> classType = object.getClass();//用不带参数的构造方法来生成对象Object objectCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});        //上面一行代码相当于下面两行代码的合并或简写        //Constructor cons = classType.getConstructor(new Class[]{});//Object objectCopy = cons.newInstance(new Object[]{});//获得对象的所有成员变量Field[]  fields = classType.getDeclaredFields();for(Field field : fields){String name = field.getName();String firstLetter = name.substring(0, 1).toUpperCase();//将属性的首字母转换成大写String getMethodName = "get" + firstLetter + name.substring(1);String setMethodName = "set" + firstLetter + name.substring(1);Method getMethod = classType.getMethod(getMethodName,new Class[]{});//Field.getType()获得该属性本身的类型Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()});Object value = getMethod.invoke(object, new Object[]{});setMethod.invoke(objectCopy, new Object[]{value}); }return objectCopy;}public static void main(String[] args) throws Exception{Customer customer = new Customer("Tom", 20);customer.setId(1L);ReflectTester test = new ReflectTester();Customer customer2 = (Customer)test.copy(customer);System.out.println(customer2.getId() + ", " + customer2.getName() + ", " + customer2.getAge());}}class Customer{private Long id;private String name;private int age;public Customer(){}public Customer(String name, int age){this.name = name;this.age = age;}//以下为这三个属性的Get和Set方法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;}}//output://1, Tom, 20

原创粉丝点击