• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Exécution de méthode avec comme nom une variable

    1.7.x
    1.7.10
    3
    7
    1377
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Benjamin Loison
      Benjamin Loison dernière édition par

      Mon problème est compliqué à expliqué, c’est avec le Java en général…

      Par exemple :

      public String get(String info)
      

      Et j’aimerais que ça return this.info seulement je veux pas avoir le String info qu’il y a dans cette classe mais je veux que ça prenne la valeur this.test si j’ai fais get(“test”);

      J’espère avoir été compris, et le plus clair en espérant des retours ambitieux :S

      >! Développeur de Altis-Life (Arma III) sur Minecraft !
      >! Site web     : https://lemnoslife.com

      1 réponse Dernière réponse Répondre Citer 0
      • BrokenSwing
        BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

        Passe par un switch ou plusieurs if
        Ou par reflection :

        
        public String get(String name)
        {
        Object obj = this.getClass().getField(name).get(this);
        if(obj instanceof String) return (String)obj;
        return null;
        }
        
        

        J’ai enlevé les try/catch mais faut que tu retourne null à chaque catch

        1 réponse Dernière réponse Répondre Citer 0
        • jglrxavpok
          jglrxavpok Modérateurs dernière édition par

          Faut faire attention, la réflection peut être lente, les MethodHandle sont plus rapides: https://docs.oracle.com/javase/7/docs/api/java/lang/invoke/MethodHandle.html
          Cependant, la moindre erreur sur les arguments ou les types et ça plante.

          :::
          J’ai pas trop le temps pour développer donc voici un exemple dans un de mes projets: https://github.com/jglrxavpok/Thoth/blob/master/src/main/java/thoth/lang/TranslationSet.java
          :::

          Modérateur sur MFF. 
          Mon Github: http://github.com/jglrxavpok
          Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwing
            BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

            Et avec la méthode que j’ai donné, les fields public seulement sont accesibles (logique)

            1 réponse Dernière réponse Répondre Citer 0
            • jglrxavpok
              jglrxavpok Modérateurs dernière édition par

              Il est possible de forcer l’accès aux membres non public avec

              AccessibleObject::setAccessible(boolean)
              

              Cependant il est possible que le jeu plante selon le niveau de sécurité de la JVM (pas un problème sur Minecraft si on a rien bidouillé pour ça)

              Avec ma méthode aussi il est possible de forcer l’accès aux membres non public avec

              MethodHandles.loopup()
              

              ATTENTION! Il faut être très vigilant avec ceci, ça peut générer des problèmes de sécurité si on le laisse trainer (ça voudrait dire que n’importe quel code pourrait exécuter n’importe quoi)

              En passant, j’aurais du faire plus attention mais MethodHandle (comme son nom l’indique) ne s’applique qu’à des méthodes et non des fields. On peut facilement contourner le problème en créant un getter pour ce field.

              Modérateur sur MFF. 
              Mon Github: http://github.com/jglrxavpok
              Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

              1 réponse Dernière réponse Répondre Citer 0
              • Benjamin Loison
                Benjamin Loison dernière édition par

                D’accord merci 🙂

                >! Développeur de Altis-Life (Arma III) sur Minecraft !
                >! Site web     : https://lemnoslife.com

                1 réponse Dernière réponse Répondre Citer 0
                • Benjamin Loison
                  Benjamin Loison dernière édition par

                  Réussi, il n’y a qu’à utiliser la réflexion, tapez sur Google, ce n’est pas très compliqué 🙂

                  >! Développeur de Altis-Life (Arma III) sur Minecraft !
                  >! Site web     : https://lemnoslife.com

                  1 réponse Dernière réponse Répondre Citer 0
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  Contact / Mentions Légales

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB