通過反射調用方法的私有屬性及方法


今天遇到一個問題,需要做一個校驗方法,方法不難但是懶得寫,記得有個地方有寫過,但是去看的時候發現是私有的,無法通過對象調用,然后就想到了通過反射好像是可以獲取到類私有的屬性及方法的,后來通過實踐,確實可以,特此記錄一下,以免后期忘記

 1 //用到反射自然需要通過反射來獲取類的對象,
 2 //通過class..forName(類路徑.類名)獲取
 3 Class<?> clazz = Class.forName("com.pansoft.osp.ifms.server.UpdateWlskSh");
 4 //需要獲取一個類對象
 5 UpdateWlskSh updateWlskSh = new UpdateWlskSh();
 6 //通過clazz.getDeclaredMethod獲取方法,參數是方法名稱及方法需要傳的參數
 7 Method method = clazz.getDeclaredMethod("checkNextZwqj",JConnection.class, String.class, String.class);
 8 //需要設置一下是否檢查,false的話或報錯
 9 method.setAccessible(true);
10 //最后通過invoke 方法調用方法,獲取的就是方法的返回值
11 Object obj = method.invoke(updateWlskSh, conn, zzjg, pNextMonth);
12 
13 //獲取私有屬性的方法
14 //參數為屬性名
15 Field declaredField = clazz.getDeclaredField(name);
16 declaredField .setAccessible(true);
17 privateStringField.get();
18 //獲取屬性值
19 //參數為實例化對象
20 String fieldValue = (String)declaredField.get(updateWlskSh);
21 
22 //獲取反射對象的方法也可以通過類名.calss 點出來,獲取的方法是一樣的

有錯誤的地方希望指出;我堅信有錯誤才會有進步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM