Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Lanciare metodi statici a runtime.

    Salve, il mio problema è il seguente:
    Ho una chiamata ad un metodo statico, con tanto di parametri, come stringa in una variabile.
    Vorrei sapere se esiste un metodo per eseguire questa stringa.

    Grazie.

  2. #2
    Usa la reflection:

    codice:
    package test;
    
    import java.lang.reflect.*;
    
    
    public class Main
    {
       public static void main(String[] args)
       {
          try
          {         
             Class cl = Class.forName("test.Test");
             Class argT[] = new Class[2];
             argT[0] = Integer.TYPE;
             argT[1] = String.class;
             
             Method method = cl.getMethod("print", argT);
             
             Object argL[] = new Object[2];
             argL[0] = new Integer(10);
             argL[1] = new String("ciao");
             
             Object retv = method.invoke(method, argL);
             Boolean b = (Boolean)retv;
             
             System.out.println(b);         
          }
          catch (Throwable ex)
          {
             ex.printStackTrace();
          }
       }
    }
    
    class Test
    {
       public static boolean print(int i, String j)
       {
          System.out.println(i + " : " + j);
          return true;
       }
    }
    Ovviamente cosa usare e come usarlo lo decidi tu.
    Ad esempio se hai una stringa come questa

    codice:
    String x = "print(10, 'ciao')";
    devi semplicemente fare il suo parsing e costruire l'invocazione del metodo come hai visto su


  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da antotan
    Usa la reflection:

    codice:
             argT[0] = Integer.TYPE;
             
             Object retv = method.invoke(method, argL);
    Funziona ma faccio notare 2 cose. Prima cosa, hai usato Integer.TYPE che non è il Class di Integer ... ma del primitivo int! Almeno per maggior chiarezza si può usare int.class (sì .. è corretto e lecito). Altrimenti uno che non sa cosa è quel TYPE potrebbe pensare che il parametro sia Integer.

    Seconda cosa, come primo parametro di invoke() hai passato method .... ma è inutile! Come ben riporta la documentazione di invoke():

    If the underlying method is static, then the specified obj argument is ignored. It may be null.

    Lo so che sono pignolo, ma volevo precisarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.