【Java】利用反射獲取class中的所有方法

目的

對于我這種半路出家的碼代碼的,一直以來最不好的習慣就是非常依賴Ctr+C和Ctr+V,但是如果代碼量大的話一直切換Tab找來找去特別不方便。最近在將一部分接口測試自動化,剛好重新學下Java,一個case就會包含很多method,翻來翻去十分不方便,于是就想把一個class中的.java文件中的所有method遍歷出來。

方案

  • 一開始想看下Python能不用正則的方法直接讀取.java文件然后匹配出來所有的方法名,后來想想估計代價有點高,pass;
  • 剛好接觸到Java的反射,利用反射機制獲取到所有的方法和參數類型

代碼

package push;

import java.lang.reflect.Method;

public class getmethod {
   public static void main(String[] args) {
       getMethodInfo("push.Demo");
   }

   /**
    * 傳入全類名獲得對應類中所有方法名和參數名
    */
   @SuppressWarnings("rawtypes")
   private static void getMethodInfo(String pkgName) {
       try {
           Class clazz = Class.forName(pkgName);
           Method[] methods = clazz.getMethods();
           for (Method method : methods) {
               String methodName = method.getName();
               System.out.println("方法名稱:" + methodName);
               Class<?>[] parameterTypes = method.getParameterTypes();
               for (Class<?> clas : parameterTypes) {
                   String parameterName = clas.getName();
                   System.out.println("參數類型:" + parameterName);
               }
               System.out.println("*****************************");
           }
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
   }
}

輸出

方法名稱:main
參數類型:[Ljava.lang.String;
*****************************
方法名稱:sendAndroidUnicast_normal
*****************************
方法名稱:sendAndroidBroadcast_normal
*****************************
方法名稱:sendAndroidUnicast_mul
*****************************
方法名稱:sendAndroidUnicast_bid
*****************************
方法名稱:sendAndroidUnicast_tzh
*****************************
方法名稱:sendAndroidUnicast_ten
*****************************
方法名稱:sendAndroidUnicast_tzhlong
*****************************
方法名稱:sendAndroidUnicast_tenlong
*****************************
方法名稱:sendAndroidUnicast_tsp
*****************************
方法名稱:sendAndroidUnicast_txzh
*****************************
方法名稱:sendAndroidUnicast_txen
*****************************
方法名稱:sendAndroidUnicast_txzhlong
*****************************
方法名稱:sendAndroidUnicast_txenlong
等等......

這樣我就可以愉快的快速粘貼到case文件中了,哈哈

        .......
        @Test
        public void title_en() {
            try {
                demo.sendAndroidUnicastten();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }   
        @Test
        public void title_zh() {
            try {
                demo.sendAndroidUnicast_tzh();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        @Test
        public void title_zhlong() {
            try {
                demo.sendAndroidUnicast_tzhlong();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        ......

總結

  • 反射的確是個好東西
  • 不過碼代碼手速快的,還是一行一行的打吧,哈哈
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,764評論 18 399
  • 我是個命不好的女人,沒有能力愛 你是走了三天還是異地了一年? 不清楚 是真的,不是假裝的,廢得掉渣,爛得像摔碎的泥...
    索索閑語閱讀 77評論 0 1
  • 2017年10月20日 晴天 今天給自己的文章做個“手術”,剖析一下它哪里出了問題?怎么解決? 就拿我寫的《拾金不...
    孌姝閱讀 281評論 2 4
  • 相信么?無論你等待了多久,總會遇到——一個人,驚艷了你的時光;一個人,溫柔了你的歲月。從一路慷慨激昂奮戰高考...
    雪鈺子閱讀 581評論 0 5