Ayuda con getMethod y con invoke.

astur_racing
02 de Marzo del 2005
Hola:
Estoy haciendo un programa en el que tengo que utilizar reflectividad, para utilizar eso tengo que utilizar getMethod para mirar si existe un metodo en la clase que se llama asi, para lo que hago:

clase.getMethod("setNombre");

Pero esto me da un error, ¿Que es lo que hago mal?
¿Que es lo que tengo que hacer para saber si una clase tiene un metodo que se llame asi y despues ejecutar ese metodo?

Muchas gracias.

astur_racing
02 de Marzo del 2005
¿Nadie sabe como funciona? ¿O es que me he explicado mal?

Heihachi
02 de Marzo del 2005
No hay ningún método getMethod que reciba como parámetros un único String.

Puedes usar o bien getMethod(String, Class[]), en tu caso getMethod("setNombre",new Class[]{String.class}) suponiendo que el parámetro sea tipo String.

Si no conoces el tipo del parámetro puedes usar getMethods y recorres la lista hasta dar con el que buscas.

Saludos!

Sinka
02 de Marzo del 2005

//6.a.Busco el método get
Method metodoGet = null;
try {
metodoGet = clase.getMethod("get" + nombreAtributo,null);
}
catch (Exception ex2) {
System.out.println("Error al buscar el método : get"+nombreAtributo);
}
//6.b.Invoco al método
try {
System.out.println("Paso 6.Valor del atributo "+nombreAtributo+" : "+metodoGet.invoke(objeto, null));
}
catch (Exception ex) {
System.out.println("Error al invocar al método : "+metodoGet);
}

Sinka
02 de Marzo del 2005
Para set...

//4.Busco método
Method metodoSet = null;
try {
Method metodos[] = clase.getMethods();
for (int i = 0; i < metodos.length; i++) {
if ( (metodos[i].toString().indexOf("set"+nombreAtributo)) != -1) {
metodoSet = metodos[i];
break;
}
}
System.out.println("Paso 4.Buscando metodo: " + metodoSet);
}
catch (Exception ex2) {
System.out.println("Error al buscar el método: set"+nombreAtributo);
}

//5.Doy valores
try {
Object resultado = metodoSet.invoke(objeto, new Object[] {valorAtributo});
System.out.println("Paso 5.Dando valor: " + valorAtributo + " al atributo "+nombreAtributo);
} catch (Exception e) {
System.out.println("Error al invocar el método: set"+nombreAtributo);
}

Sinka
02 de Marzo del 2005
Direcciones interesantes sobre reflectividad:

http://www.javahispano.org/articles.article.action?id=90
http://javaalmanac.com/egs/java.lang.reflect/pkg.html