最近在看Java的反射,把學習的東西整理一下,大家共同研究,有需要改進的地方,請大家指正。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionTest {
public static void main(String args[]) {
try {
//通過反射獲得類
Class clazz = Class.forName("User");
//實例化類
Object obj = clazz.newInstance();
//獲得類的所有屬性
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
//獲得寫方法
Method wM = pd.getWriteMethod();
//獲得讀方法
Method rM = pd.getReadMethod();
//獲得方法的參數,因為是標準的set方法,所以只取第一個參數
Class[] classes = wM.getParameterTypes();
//判斷參數不為空,則只有一個
if(classes != null && classes.length == 1){
//判斷參數類型
if(classes[0].equals(String.class)){
//調用set方法,傳參
wM.invoke(obj, "Jack");
//調用get方法,獲得返回值
String str = (String) rM.invoke(obj);
System.out.println("Name is : " + str);
}
if(classes[0].equals(int.class)){
wM.invoke(obj, 2);
Integer num = (Integer) rM.invoke(obj);
System.out.println("Age is : " + num);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
private String Name;
private int age;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}