java反射機制

java反射機制測試

package com.infowarelab.java.test;

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

public class ReflectTester {
@SuppressWarnings("unchecked")
public Object copy(Object object) throws Exception {
// 獲得對象類型
Class classType = object.getClass();
System.out.println("" + 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("lunzi", 26);
customer.setId(new Long(1));
Customer customerCopy = (Customer) new ReflectTester().copy(customer);
System.out.println("Copy information:" + 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 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 long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}
}
發佈了22 篇原創文章 · 獲贊 0 · 訪問量 4205
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章