usted puede utilizar la reflexión
clase de muestra
package com.google.util;
Class Maths
{
public Integer doubleIt(Integer a)
{
return a*2;
}
}
y usar algo como esto:
paso 1: - Clase de carga con el nombre de entrada dado como cadena
Class<?> obj=Class.forName("Complete_ClassName_including_package");
//like:- Class obj=Class.forName("com.google.util.Maths");
Paso 2: - obtener Método con el nombre dado y el tipo de parámetro
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);
paso 3: - Invocar método por el que pasa Instancia de objeto y el argumento
Object obj2= method.invoke(obj.newInstance(), id);
//like :- method.invoke(obj.newInstance(), 45);
QUE PUEDE HACER PASO 2 COMO ESTO TAMBIÉN
(cuando no saben método particular existe en una clase de comprobar todo método por el bucle gama de método)
Method[] methods=obj.getMethods();
Method method=null;
for(int i=0;i<methods.length();i++)
{
if(method[1].getName().equals("methodNameWeAreExpecting"))
{
method=method[i];
}
}
sólo se puede hacer que si usted sabía en tiempo de compilación, esa instancia va a ser un FooBar - el cual ¡entonces significa que no necesitarías usar el reflejo en primer lugar! – Chii
@Chii: No necesariamente. FooBar podría ser el tipo más general del que está heredando la que estás obteniendo a través del reflejo. Así es como funcionan los controladores JDBC y cuántas arquitecturas de plugins están diseñadas. – quosoo