English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Notes sur l'application réelle de la réflexion Java

最近工作中遇到一个这样的问题:

为某个项目中的所有接口做一个测试工具,使用java Swing技术,该项目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本。

于是就引入了这样一个问题:

有些接口如果在部分版本中不存在,那么通过界面执行这个操作的时候就会报错,所以为了兼容所有版本,就要在方法调用之前考虑方法是否存在,同时为了不在编译时抛异常,在调用方法时

也需要通过反射来调用,具体实现如下:

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

/**
   * Check if the method exists
   *
   * @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("Exception survenue à :" + MainJFrame.hostName + "; Détails :" + ex.getMessage());
      result = false;
    }
    return result;
  }

Parameter description:

(1)obj:object representing the method to be called

(2)methodName:name of the method to be called

(3)paraTypes:required parameter types for the method (array when multiple)

Through this method, you can determine whether the method methodName (parameter type is) called through the obj object exists. If it does not exist, it will throw a NoSuchMethodException exception

Secondly, invoke the method via reflection to avoid compilation-time exceptions

sysUser = MainJFrame.getSysUser();
    Class[] paramObj = {String.class, long.class, String.class, String.class, int.class};       //Check if the method exists
    boolean isExist = CommonUtil.judgeMethodIsExist(sysUser, "createBucket", paramObj);
    if (isExist) {
      try {            //Invoke method via reflection
        Class clazz = sysUser.getClass();            //Method name--Type of parameters in the method (in order of parameters)
        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 creation successful");
          log.info("Bucket creation successful");
        } else {
          CommonUtil.showWarnInfo("Bucket creation failed, internal server error!");
          log.info("Bucket creation failed, internal server error");
        }
      catch (Exception ex) {
        CommonUtil.showWarnInfo(ex.getMessage());
        log.error("Exception survenue à :" + MainJFrame.hostName + "; Détails :" + ex.getMessage());
      }
    }

Dans le code suivant :

Ligne une : l'objet appelant la méthode createBucket est sysUser

Ligne deux : le tableau de types de paramètres dans la méthode est utilisé pour juger de l'existence de la méthode

Ligne trois : jugement de l'existence de la méthode à travers l'objet, le nom de la méthode et le tableau de types de paramètres

Par ces trois lignes, si la méthode existe, elle exécutera les tâches suivantes, et s'il n'existe pas, elle affichera un message d'exception

Ligne six : obtention de la classe de l'objet

Ligne sept : obtention de l'objet Method pour obtenir la méthode, les paramètres sont le nom de la méthode et le type des paramètres correspondants

Ligne huit : appel de la méthode createBucket via l'objet Method, les paramètres sont l'objet sysUser et les paramètres (valeurs) nécessaires

Grâce à ces méthodes, même si une interface n'existe pas dans l'objet, il n'y aura pas d'exception de compilation.

En vérité, c'est la première fois que je rencontre un problème de réflexion Java dans mon propre projet, il est nécessaire de l'enregistrer !

Résumé

Voici tous les contenus de cet article sur les notes d'application pratique de la réflexion Java, j'espère qu'ils vous seront utiles. Les amis intéressés peuvent continuer à consulter notre site :

Tutoriel simple de réflexion Java

Les choses que vous devez savoir sur le mécanisme de réflexion Java

Bienvenue pour laisser des commentaires si vous trouvez des insuffisances. Merci d'appuyer sur ce site !

Déclaration : Le contenu de cet article est issu du réseau, propriété des auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet. Ce site n'en possède pas la propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, vous êtes invités à envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer