java反射的invoke方法


 

public static void invoke(){
     //獲取class對象
        Class clazz = Class.forName("cn.ph.test.UserDao");
        //獲取對象方法
        Method[] mds = clazz.getMethods();
        //遍歷
        for (Method md : mds) {
     /**
         *@MyTest.class 注解碼對象
         *invake(Object obj,Object...args)
        */
      if (md.isAnnotationPresent(MyTest.class)) {
        //如果當前的方法上有自定義MyTest注解,執行,否則忽略
        md.invoke(new UserDao());//方法對應的類
      }

    /*
    //getMethod第一個參數是方法名,第二個參數是該方法的參數類型(多個用,隔開),
    Method method = clazz.getMethod("test", String.class);
    //Method類的invoke(Object obj,Object args[])方法接收的參數必須為對象,
    //如果參數為基本類型數據,必須轉換為相應的包裝類型的對象。invoke()方法的返回值總是對象,
    //如果實際被調用的方法的返回類型是基本類型數據,那么invoke()方法會把它轉換為相應的包裝類型的對象,
    //再將其返回
    String s = "aa";
    method.invoke(m,(Object)s);//報錯時候,參數記得強轉Object
    */

      }
 }
View Code

 

**注意:**

>1、getMethods返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口的公共 member 方法。
>2、getDeclaredMethods返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。

**也就是說getDeclaredMethods能拿到所有(不包括繼承的方法),而getMethods只能拿到public方法(包括繼承的類或接口的方法),其他方法也是同理的:**

 


免責聲明!

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



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