android反射之Method調用

public class ThirdActivity extends AppCompatActivity {
...
static public class MyTest{

        public MyTest(){}

        public void test(){
            //注意這裏不能使用logi,這是android的庫,main調試的時候使用的是java的庫
            System.out.println("Call NoParam test");
        }

        public void test(String val){
            //注意這裏不能使用logi,這是android的庫,main調試的時候使用的是java的庫
            System.out.println("Call Param test,param:"+val);
        }
    }


 public static void main(String[] args) throws Exception {
        Class myTestClass = MyTest.class;
        //獲取無參test方法
        Method mtest_noparam = myTestClass.getDeclaredMethod("test");
       //獲取有參數test方法
        Class[] program =new Class[]{String.class};
        Method mtest = myTestClass.getDeclaredMethod("test",program);
        //生成MyTest實例,注意MyTest必須是static的,因爲main是static,static不能直接訪問非static內部類
        Object mytestObj = myTestClass.newInstance();
        if(mtest_noparam != null){
            try {
                mtest_noparam.invoke(mytestObj);
                mtest.invoke(mytestObj,"hellow word");
            }
            catch (Exception e){
                e.printStackTrace();
            }

        }
    }
}


在這裏插入圖片描述
調用Methon首先獲取Method。

  • 通過Class獲取Method方法

    • getDeclaredMethods:獲取所有聲明的方法(不包含父類方法)
    • getDeclaredMethod:通過函數名稱+參數列表獲取聲明的方法(不包含父類方法)。具體demo見上述代碼
    • getMethods:獲取該類的所有方法(包括父類方法)
    • getMethods:通過函數名稱+參數列表獲取類的方法(包括父類方法)
  • Method 判斷是否是註解類方法

    • getDeclaredAnnotations:獲取所有註解類的方法(不包含父類方法)
    • getAnnotation:通過註解類名獲取註解類的方法(不包含父類方法)
    • getAnnotations:獲取所有註解類的方法(包括父類方法)
    • getAnnotation:通過註解類名獲取註解類的方法(包括父類方法)
  • Method 調用本身方法

    • invoke:必須指定一個實例,因爲Method需要調用對應類實例的方法,類的非靜態方法屬於對象,不屬於類本身。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章