Vous pouvez utiliser l'échantillon Réflexion
classe
package com.google.util;
Class Maths
{
public Integer doubleIt(Integer a)
{
return a*2;
}
}
et utiliser quelque chose comme this-
étape 1: - Classe de charge avec le nom d'entrée donné comme chaîne
Class<?> obj=Class.forName("Complete_ClassName_including_package");
//like:- Class obj=Class.forName("com.google.util.Maths");
étape 2: - obtenir la méthode avec le nom donné et le type de paramètre
Method method=obj.getMethod("NameOfMthodToInvoke", arguments);
//arguments need to be like- java.lang.Integer.class
//like:- Method method=obj.getMethod("doubleIt",java.lang.Integer.class);
étape 3: - Invoquer Méthode par passage instance de l'objet et des arguments
Object obj2= method.invoke(obj.newInstance(), id);
//like :- method.invoke(obj.newInstance(), 45);
vous pouvez faire ÉTAPE 2 COMME CELA AUSSI
(lorsque vous ne sais pas méthode particulière existe dans une classe que vous vérifiez toutes les méthodes en bouclant la gamme de méthode)
Method[] methods=obj.getMethods();
Method method=null;
for(int i=0;i<methods.length();i++)
{
if(method[1].getName().equals("methodNameWeAreExpecting"))
{
method=method[i];
}
}
vous pouvez ne faire que si vous saviez au moment de la compilation, cette instance va être un FooBar - qui signifie alors que vous n'auriez pas besoin d'utiliser la réflexion en premier lieu! – Chii
@Chii: Pas nécessairement. FooBar pourrait être le type le plus général dont hérite celui que vous obtenez à travers la réflexion. C'est ainsi que fonctionnent par exemple les pilotes JDBC et combien d'architectures de plugins sont conçues. – quosoo