經過get、set方法,動態生成對象

    最近在看Java的反射,把學習的東西整理一下,你們共同研究,有須要改進的地方,請你們指正。 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;
	}
}
相關文章
相關標籤/搜索