您好,登錄后才能下訂單哦!
學習內容
使用反射調用方法
當獲得某個類對應的Class對象后,就可以通過該Class對象的getMethods()方法或getMethod()方法來獲取全部方法或指定方法,這二個方法的返回值是Method對象數組,或者Method對象。
獲得Method對象后,程序就可以通過該Method來調用對應的方法,在Method里包含一個invoke方法。
該方法中的obj是執行該方法的對象,后面的args是執行該方法時傳入該方法的參數
使用參數 args
在 obj
上指派該對象所表示方法的結果
1 2 3 4 5 6 7 8 9 10 | public static void test4() throws Exception{ Class<Person> personClass = Person. class ; Person person = personClass.newInstance(); //得到setName方法 Method method = personClass.getMethod( "setName" , String. class ); //調用setName,為name賦值 Object object = method.invoke(person, "wangwu" ); System.out.println(person); System.out.println(object); } |
當通過Method的invoke方法來調用對應的方法時,Java會要求程序必須有調用該方法的權限,如果 程序確實需要調用某個對象的private方法,可以先調用Method對象的如下方法
public void setAccessible(boolean flag):將此對象的 accessible 標志設置為指示的布爾值。值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。值為 false 則指示反射的對象應該實施 Java 語言訪問檢查。
public boolean isAccessible():獲取此對象的 accessible 標志的值。
1 2 3 | private void setName(String name) { this .name = name; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void test5() throws Exception{ Class<Person> personClass = Person. class ; Person person = personClass.newInstance(); //得到setName方法 Method method = personClass.getDeclaredMethod( "setName" , String. class ); //調用訪問權限檢查 if (!method.isAccessible()){ method.setAccessible( true ); } //調用setName,為name賦值 Object object = method.invoke(person, "wangwu" ); System.out.println(person); System.out.println(object); } |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。