1. 程式人生 > >反射機制有個坑----java

反射機制有個坑----java

() ins 調用 通過 兩個 初始化 -s 類成員 得到

這篇博客是寫給我自己的,希望以後不論在多麽復雜的環境下,出現這種問題,我能及時反應過來。

反射機制有個坑,如果你要反射調用某個類的某個方法,而這個方法內部有該類的成員。但這個類成員在你進行反射前,已通過new出的對象賦值了。此時,你再通過元類對象.newInstance()產生一個對象,找出要反射的方法,invoke執行,是會出問題的。因為此時反射執行的方法裏的類成員沒有被初始化。解決方法是: 將以前的對象傳遞過來,通過以前的對象.getclass()的方式得到元類對象klass,接著再反射找方法。最終invoke執行方法時填寫以前的對象,千萬別newInstance

 以前的對象和元類對象.newInstance()產生的對象之間的關系:同一個類的不同對象。

 類比於:int *p = (int *) malloc(sizeof(int) * 10);

     int *q = (int *) malloc(sizeof(int) * 10);

 中p和q的關系 (p和q的值 表示堆裏面不同空間的首地址,而這兩個不同空間的類型是相同的,即空間大小和空間內容的解釋方式是相同的)

反射機制有個坑----java