反射案例
案例一:
1.Test.java
package com.test;public class Test {private String name="hello";public String getName(){return name;}}
package com.test;import java.lang.reflect.Field;public class TestMain { public static void main(String[] args) throws Exception {Test test=new Test();Class clz=Test.class;Field field=clz.getDeclaredField("name");field.setAccessible(true);field.set(test, "world");System.out.println(test.getName());}}
package com.test.reflection;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectTester{public Object copy(Object object) throws Exception{// 获得对象的类型Class classType = object.getClass();System.out.println("Class:" + classType.getName());// 通过默认构造方法创建一个新的对象Object objectCopy = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});// 获得对象的所有属性Field fields[] = classType.getDeclaredFields();for (int i = 0; i < fields.length; i++){Field field = fields[i];String fieldName = field.getName();String firstLetter = fieldName.substring(0, 1).toUpperCase();// 获得和属性对应的getXXX()方法的名字String getMethodName = "get" + firstLetter + fieldName.substring(1);// 获得和属性对应的setXXX()方法的名字String setMethodName = "set" + firstLetter + fieldName.substring(1);// 获得和属性对应的getXXX()方法Method getMethod = classType.getMethod(getMethodName,new Class[] {});// 获得和属性对应的setXXX()方法Method setMethod = classType.getMethod(setMethodName,new Class[] { field.getType() });// 调用原对象的getXXX()方法Object value = getMethod.invoke(object, new Object[] {});System.out.println(fieldName + ":" + value);// 调用拷贝对象的setXXX()方法setMethod.invoke(objectCopy, new Object[] { value });}return objectCopy;}public static void main(String[] args) throws Exception{Customer customer = new Customer("Tom", 21);customer.setId(new Long(1));Customer customerCopy = (Customer) new ReflectTester().copy(customer);System.out.println("Copy information:" + customerCopy.getId() + " "+ customerCopy.getName() + " " + customerCopy.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;}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;}}