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.
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.
Usa la reflection:
Ovviamente cosa usare e come usarlo lo decidi tu.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; } }
Ad esempio se hai una stringa come questa
devi semplicemente fare il suo parsing e costruire l'invocazione del metodo come hai visto sucodice:String x = "print(10, 'ciao')";
![]()
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.Originariamente inviato da antotan
Usa la reflection:
codice:argT[0] = Integer.TYPE; Object retv = method.invoke(method, argL);
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet