最近在看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; } }