国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java反射在實際工作中的應用筆記

2024-07-13 10:15:19
字體:
來源:轉載
供稿:網友

最近工作中遇到一個這樣的問題:

為某個項目中的所有接口做一個測試工具,使用javascript/259949.html">java/273253.html">java Swing技術,該項目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本。

于是就引入了這樣一個問題:

有些接口如果在部分版本中不存在,那么通過界面執行這個操作的時候就會報錯,所以為了兼容所有版本,就要在方法調用之前考慮方法是否存在,同時為了不在編譯時拋異常,在調用方法時

也需要通過反射來調用,具體實現如下:

一、使用反射判斷方法是否存在

/**   * 判斷方法是否存在   *   * @param obj JObjectService實例   * @param methodName 方法名稱   * @param paraTypes 方法形參類型數組   * @return   */  public static boolean judgeMethodIsExist(Object obj, String methodName, Class[] paraTypes) {    boolean result = true;    try {      if (null != obj) {        Method method = obj.getClass().getMethod(methodName, paraTypes);      }    } catch (NoSuchMethodException ex) {      showWarnInfo(ex.toString());      log.error("異常發生在:" + MainJFrame.hostName + ";詳細信息為:" + ex.getMessage());      result = false;    }    return result;  }

參數介紹:

(1)obj:表示調用某個方法的對象

(2)methodName:要調用的方法名稱

(3)paraTypes:方法所需的參數類型(多個時為數組)

通過這個方法,就可以判斷你通過obj對象調用的methodName(參數類型為)方法是否存在,如果不存在就會跑NoSuchMethodException異常

二、通過反射調用方法,避免編譯時異常

sysUser = MainJFrame.getSysUser();    Class[] paramObj = {String.class, long.class, String.class, String.class, int.class};       //判斷方法是否存在    boolean isExist = CommonUtil.judgeMethodIsExist(sysUser, "createBucket", paramObj);    if (isExist) {      try {            //通過反射調用方法        Class clazz = sysUser.getClass();            //方法名稱--方法中參數的類型(按參數順序)        Method createBucket = clazz.getDeclaredMethod("createBucket",String.class, long.class, String.class, String.class, int.class);        int create = (int) createBucket.invoke(sysUser,bucketName, Long.parseLong(bucketSize), bucketLoc, bucketAcl, Integer.parseInt(StringUtil.emptyToZero(bucketCycle)));        if (create == 1) {          CommonUtil.showInfo("Bucket創建成功");          log.info("Bucket創建成功");        } else {          CommonUtil.showWarnInfo("Bucket創建失敗,服務器內部錯誤!");          log.info("Bucket創建失敗,服務器內部錯誤");        }      } catch (Exception ex) {        CommonUtil.showWarnInfo(ex.getMessage());        log.error("異常發生在:" + MainJFrame.hostName + ";詳細信息為:" + ex.getMessage());      }    }

以上代碼中:

第一行:調用方法createBucket方法的對象sysUser

第二行:方法中的參數類型數組,在判斷方法是否存在時用

第三行:通過對象、方法名和參數類型數組判斷方法是否存在

通過以上三行,方法存在時會執行下面的任務,不存在是則會提示異常信息

第六行:獲取該對象的Class

第七行:獲取對象的方法Method對象,參數為方法名稱和參數對應的類型

第八行:通過Method對象反射調用createBucket方法,參數分別是sysUser對象和需要的參數(值)

通過以上方法,即使對象中的某個接口不存在時也不會出現編譯時異常。

講真,這是第一次在自己的項目中遇到Java反射方面的問題,有必要需要記錄一下!

總結

以上就是本文關于Java反射在實際工作中的應用筆記的全部內容,希望對大家有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 且末县| 达拉特旗| 兴仁县| 蚌埠市| 龙井市| 莒南县| 屯门区| 岑溪市| 堆龙德庆县| 永川市| 望谟县| 遂溪县| 邹平县| 大厂| 寿光市| 台江县| 将乐县| 互助| 奉新县| 清涧县| 邳州市| 铜梁县| 名山县| 喀喇沁旗| 澄迈县| 凤凰县| 云阳县| 兴山县| 湄潭县| 泾川县| 莱芜市| 顺平县| 海安县| 抚顺市| 潼关县| 富阳市| 汶上县| 崇左市| 余庆县| 巫山县| 赤壁市|