Come posso richiamare un metodo con parametri usando la riflessione?Come richiamare un metodo in java usando la riflessione
Desidero specificare i valori di tali parametri.
Come posso richiamare un metodo con parametri usando la riflessione?Come richiamare un metodo in java usando la riflessione
Desidero specificare i valori di tali parametri.
Ecco un semplice esempio di invocazione di un metodo utilizzando la riflessione che coinvolge i primitivi.
import java.lang.reflect.*;
public class ReflectionExample {
public int test(int i) {
return i + 1;
}
public static void main(String args[]) throws Exception {
Method testMethod = ReflectionExample.class.getMethod("test", int.class);
int result = (Integer) testMethod.invoke(new ReflectionExample(), 100);
System.out.println(result); // 101
}
}
a essere sostenuta, si dovrebbe catturare e gestire tutte le eccezioni di riflessione legati controllato NoSuchMethodException
, IllegalAccessException
, InvocationTargetException
.
@ polygenelubrificanti-grazie – Steven
È possibile utilizzare getClass in qualsiasi oggetto per scoprirne la classe. Quindi è possibile utilizzare getMethods per scoprire tutti i metodi disponibili. Una volta che hai il metodo corretto è possibile chiamare invoke con qualsiasi numero di parametri
eventuali collegamenti che mostrano l'esempio – Steven
questo è il modo più semplice che conosco, ha bisogno di essere circondato da provare & cattura:
Metodo m = .class.getDeclaredMethod ("", arg_1.class, arg_2.class, ... arg_n.class); result =() m.invoke (null, (Object) arg_1, (Object) arg_2 ... (Object) arg_n);
Questo è per invocare un metodo statico, se si desidera richiamare un metodo non statico, è necessario sostituire il primo argomento di m.invoke() da null all'oggetto da cui viene invocato il metodo sottostante.
non dimenticare di aggiungere un'importazione a java.lang.reflect. *;
cosa succede se sto utilizzando le primitive – Steven
@Shuky: perché trasmettere gli argomenti a Object? –
@Seteven, Carlos Heuberger: il casting non è richiesto, volevo solo dire che non possono essere primitive (invece di int, usare Integer, ecc.) –
Per chiamare un metodo di classe utilizzando la riflessione è molto semplice. È necessario creare una classe e generare un metodo al suo interno. come segue
package reflectionpackage;
public class My {
public My() {
}
public void myReflectionMethod() {
System.out.println("My Reflection Method called");
}
}
e chiamare questo metodo in un'altra classe utilizzando la riflessione.
package reflectionpackage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionClass {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class c=Class.forName("reflectionpackage.My");
Method m=c.getDeclaredMethod("myReflectionMethod");
Object t = c.newInstance();
Object o= m.invoke(t);
}
}
Perché c'è un tag 'eclipse-plugin'? – fastcodejava
Ho rimosso il tag 'eclipse-plugin'. – ewernli