天天看點

Java-----内省機制

内省機制:是一種使用反射擷取或設定對象屬性的方式。

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);//給屬性指派