内省機制:是一種使用反射擷取或設定對象屬性的方式。
Introspector 内省類
//還有一個stu實體類沒有寫,裡面有sId,sName,age,gender屬性,
public static void main(String[] args) throws Exception {
//擷取類對象
Class<stu> stuClass = stu.class;
//使用内省類Introsperctor擷取類資訊對象
BeanInfo beanInfo = Introspector.getBeanInfo(stuClass);
//調用類資訊的getPropertyDescriptors()方法擷取屬性描述符
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
//列印屬性描述符内容(包括父類屬性)
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String name = propertyDescriptor.getName();
System.out.print(name+" ");
}
}
//列印結果: age class gender sId sName (結果中含有class是因為父類Object中有class屬性)
//當我們已知實體類中确實含有此屬性,那我們怎麼給屬性指派呢?有人會說使用類對象建立一個帶參對象就可以解決,
//但我們無法得知帶參構造方法參數是什麼樣的
//已知age屬性
PropertyDescriptor pd = new PropertyDescriptor("age", stuClass);
Method readMethod = pd.getReadMethod(); //getReadMethod()等價于擷取屬性的get方法
Method writeMethod = pd.getWriteMethod(); //getWriteMethod()等價于擷取屬性的set方法
writeMethod.invoke(stuClass, 20);//給屬性指派