package com.ygl.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectTest {
public Object copy(Object object) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException{
//使用对象的getClass()方法,前提先有对象实例
Class<?> clazz=object.getClass();
Object objectcopy=clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
String name=field.getName();
String firstLetter=name.substring(0,1).toUpperCase();
String getMethodName="get"+firstLetter+name.substring(1);//从第1位直到最后所有字符
String setMethodName="set"+firstLetter+name.substring(1);//从第1位直到最后所有字符
Method getMethod=clazz.getMethod(getMethodName, new Class[]{});
Method setMethod=clazz.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 SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Customer customer=new Customer("ygl",20);
customer.setId(1L);
ReflectTest reflectTest=new ReflectTest();
Customer customer2=(Customer)reflectTest.copy(customer);
System.out.println(customer2);
try {
reflectTest.copy(new Customer());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Customer{
private Long id;
private String name;
private int age;
public Customer() {
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
}
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;
}
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectTest {
public Object copy(Object object) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException{
//使用对象的getClass()方法,前提先有对象实例
Class<?> clazz=object.getClass();
Object objectcopy=clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
String name=field.getName();
String firstLetter=name.substring(0,1).toUpperCase();
String getMethodName="get"+firstLetter+name.substring(1);//从第1位直到最后所有字符
String setMethodName="set"+firstLetter+name.substring(1);//从第1位直到最后所有字符
Method getMethod=clazz.getMethod(getMethodName, new Class[]{});
Method setMethod=clazz.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 SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Customer customer=new Customer("ygl",20);
customer.setId(1L);
ReflectTest reflectTest=new ReflectTest();
Customer customer2=(Customer)reflectTest.copy(customer);
System.out.println(customer2);
try {
reflectTest.copy(new Customer());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Customer{
private Long id;
private String name;
private int age;
public Customer() {
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
}
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;
}
}