• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Exécution de méthode avec comme nom une variable

    1.7.x
    1.7.10
    3
    7
    1305
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Benjamin Loison
      Benjamin Loison last edited by

      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
      TeamSpeak : ts.lemnoslife.com

      1 Reply Last reply Reply Quote 0
      • BrokenSwing
        BrokenSwing Moddeurs confirmés Rédacteurs last edited by

        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 Reply Last reply Reply Quote 0
        • jglrxavpok
          jglrxavpok Modérateurs last edited by

          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 Reply Last reply Reply Quote 0
          • BrokenSwing
            BrokenSwing Moddeurs confirmés Rédacteurs last edited by

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

            1 Reply Last reply Reply Quote 0
            • jglrxavpok
              jglrxavpok Modérateurs last edited by

              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 Reply Last reply Reply Quote 0
              • Benjamin Loison
                Benjamin Loison last edited by

                D’accord merci 🙂

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

                1 Reply Last reply Reply Quote 0
                • Benjamin Loison
                  Benjamin Loison last edited by

                  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
                  TeamSpeak : ts.lemnoslife.com

                  1 Reply Last reply Reply Quote 0
                  • 1 / 1
                  • First post
                    Last post
                  Design by Woryk
                  Contact / Mentions Légales

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB