最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java反射在實(shí)際工作中的應(yīng)用筆記

 更新時(shí)間:2017年12月22日 14:37:14   作者:HelloWhy  
這篇文章主要介紹了Java反射在實(shí)際工作中的應(yīng)用筆記,具有一定借鑒價(jià)值,需要的朋友可以參考下。

最近工作中遇到一個(gè)這樣的問(wèn)題:

為某個(gè)項(xiàng)目中的所有接口做一個(gè)測(cè)試工具,使用java Swing技術(shù),該項(xiàng)目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本。

于是就引入了這樣一個(gè)問(wèn)題:

有些接口如果在部分版本中不存在,那么通過(guò)界面執(zhí)行這個(gè)操作的時(shí)候就會(huì)報(bào)錯(cuò),所以為了兼容所有版本,就要在方法調(diào)用之前考慮方法是否存在,同時(shí)為了不在編譯時(shí)拋異常,在調(diào)用方法時(shí)

也需要通過(guò)反射來(lái)調(diào)用,具體實(shí)現(xiàn)如下:

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

/**
   * 判斷方法是否存在
   *
   * @param obj JObjectService實(shí)例
   * @param methodName 方法名稱
   * @param paraTypes 方法形參類型數(shù)組
   * @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("異常發(fā)生在:" + MainJFrame.hostName + ";詳細(xì)信息為:" + ex.getMessage());
      result = false;
    }
    return result;
  }

參數(shù)介紹:

(1)obj:表示調(diào)用某個(gè)方法的對(duì)象

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

(3)paraTypes:方法所需的參數(shù)類型(多個(gè)時(shí)為數(shù)組)

通過(guò)這個(gè)方法,就可以判斷你通過(guò)obj對(duì)象調(diào)用的methodName(參數(shù)類型為)方法是否存在,如果不存在就會(huì)跑NoSuchMethodException異常

二、通過(guò)反射調(diào)用方法,避免編譯時(shí)異常

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 {            //通過(guò)反射調(diào)用方法
        Class clazz = sysUser.getClass();            //方法名稱--方法中參數(shù)的類型(按參數(shù)順序)
        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創(chuàng)建成功");
          log.info("Bucket創(chuàng)建成功");
        } else {
          CommonUtil.showWarnInfo("Bucket創(chuàng)建失敗,服務(wù)器內(nèi)部錯(cuò)誤!");
          log.info("Bucket創(chuàng)建失敗,服務(wù)器內(nèi)部錯(cuò)誤");
        }
      } catch (Exception ex) {
        CommonUtil.showWarnInfo(ex.getMessage());
        log.error("異常發(fā)生在:" + MainJFrame.hostName + ";詳細(xì)信息為:" + ex.getMessage());
      }
    }

以上代碼中:

第一行:調(diào)用方法createBucket方法的對(duì)象sysUser

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

第三行:通過(guò)對(duì)象、方法名和參數(shù)類型數(shù)組判斷方法是否存在

通過(guò)以上三行,方法存在時(shí)會(huì)執(zhí)行下面的任務(wù),不存在是則會(huì)提示異常信息

第六行:獲取該對(duì)象的Class

第七行:獲取對(duì)象的方法Method對(duì)象,參數(shù)為方法名稱和參數(shù)對(duì)應(yīng)的類型

第八行:通過(guò)Method對(duì)象反射調(diào)用createBucket方法,參數(shù)分別是sysUser對(duì)象和需要的參數(shù)(值)

通過(guò)以上方法,即使對(duì)象中的某個(gè)接口不存在時(shí)也不會(huì)出現(xiàn)編譯時(shí)異常。

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

總結(jié)

以上就是本文關(guān)于Java反射在實(shí)際工作中的應(yīng)用筆記的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Java反射簡(jiǎn)易教程

關(guān)于Java反射機(jī)制 你需要知道的事情

如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • 攔截器獲取request的值之后,Controller拿不到值的解決

    攔截器獲取request的值之后,Controller拿不到值的解決

    這篇文章主要介紹了攔截器獲取request的值之后,Controller拿不到值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot自定義starter示例代碼

    springboot自定義starter示例代碼

    SpringBoot自定義Starter項(xiàng)目的命名建議遵循xxx-spring-boot-starter格式,以避免與官方或第三方Starter產(chǎn)生沖突,核心規(guī)范包括自動(dòng)裝配文件的配置,旨在通過(guò)spring.factories或spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    2024-11-11
  • 解析SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題

    解析SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題

    這篇文章主要介紹了SpringSecurity系列之自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問(wèn)題,本文通過(guò)實(shí)例給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式)

    解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式)

    這篇文章主要介紹了解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解springboot和vue前后端分離開(kāi)發(fā)跨域登陸問(wèn)題

    詳解springboot和vue前后端分離開(kāi)發(fā)跨域登陸問(wèn)題

    這篇文章主要介紹了詳解springboot和vue前后端分離開(kāi)發(fā)跨域登陸問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Spring Boot使用過(guò)濾器和攔截器分別實(shí)現(xiàn)REST接口簡(jiǎn)易安全認(rèn)證示例代碼詳解

    Spring Boot使用過(guò)濾器和攔截器分別實(shí)現(xiàn)REST接口簡(jiǎn)易安全認(rèn)證示例代碼詳解

    這篇文章主要介紹了Spring Boot使用過(guò)濾器和攔截器分別實(shí)現(xiàn)REST接口簡(jiǎn)易安全認(rèn)證示例代碼,通過(guò)開(kāi)發(fā)實(shí)踐,理解過(guò)濾器和攔截器的工作原理,需要的朋友可以參考下
    2018-06-06
  • springCloud項(xiàng)目搭建流程步驟分解

    springCloud項(xiàng)目搭建流程步驟分解

    SpringCloud 作為當(dāng)下最為流行的微服務(wù)框架,也越來(lái)越多的人去學(xué)習(xí)和使用這個(gè)框架。下面,我將帶大家簡(jiǎn)單地認(rèn)識(shí)一下 SpringCloud 框架,以及如何來(lái)搭建一個(gè) SpringCloud 項(xiàng)目環(huán)境的教程
    2022-05-05
  • Java雙重MD5加密實(shí)現(xiàn)安全登錄

    Java雙重MD5加密實(shí)現(xiàn)安全登錄

    MD5對(duì)密碼進(jìn)行加密存儲(chǔ)是常見(jiàn)的一種加密方式,本文主要介紹了Java雙重MD5加密實(shí)現(xiàn)安全登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 基于Java實(shí)現(xiàn)Actor模型

    基于Java實(shí)現(xiàn)Actor模型

    Actor模型是一種常見(jiàn)的并發(fā)模型,與最常見(jiàn)的并發(fā)模型—共享內(nèi)存(同步鎖)不同,它將程序分為許多獨(dú)立的計(jì)算單元—Actor,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Maven pom.xml 添加本地jar包依賴以及打包方法

    Maven pom.xml 添加本地jar包依賴以及打包方法

    這篇文章主要介紹了Maven pom.xml 添加本地jar包依賴以及打包方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

苍梧县| 横峰县| 蕲春县| 柳林县| 多伦县| 星座| 湖南省| 安多县| 永平县| 桃江县| 安福县| 咸宁市| 攀枝花市| 朝阳区| 游戏| 福州市| 兴化市| 城步| 南溪县| 盐边县| 方正县| 观塘区| 会理县| 任丘市| 延津县| 金川县| 南投市| 阿城市| 雅安市| 边坝县| 扶余县| 湖州市| 辉县市| 德昌县| 石渠县| 筠连县| 华宁县| 平利县| 镶黄旗| 松阳县| 乐至县|