反射機制有個坑----java
阿新 • • 發佈:2019-04-10
() 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