Skip to content

Instantly share code, notes, and snippets.

@javerosanonimos
Last active February 17, 2017 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javerosanonimos/75641905eeadef1cbb714b1d5973c050 to your computer and use it in GitHub Desktop.
Save javerosanonimos/75641905eeadef1cbb714b1d5973c050 to your computer and use it in GitHub Desktop.
Código para ejecutar métodos con reflection
/**
@Autor: www.javerosanonimos.com
Twitter: @javerosanonimos
Facebook: www.facebook.com/JaverosAnonimos
e-mail: javerosanonimos@gmail.com
**/
public class ContenedorMetodosParaReflection {
private Double descuento;
public Double getDescuento() {
return descuento;
}
public void setDescuento(final Double descuento) {
this.descuento = descuento;
}
}
/**
@Autor: www.javerosanonimos.com
Twitter: @javerosanonimos
Facebook: www.facebook.com/JaverosAnonimos
e-mail: javerosanonimos@gmail.com
**/
public class TestEjecucionMetodosPorReflection(){
@Test
public void testEjecutarMetodosDinamicamenteConReflection() throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// Clase donde estan mis metodos
final ContenedorMetodosParaReflection claseQueContieneMetodos = new ContenedorMetodosParaReflection();
// Obtenemos el class
final Class classContenedorMetodos = claseQueContieneMetodos.getClass();
// Creamos una nueva instancia a partir del class
final ContenedorMetodos nuevaInstanciaReflection = classContenedorMetodos.newInstance();
// Definimos parametros del metodo
final Object[] parametros = new Object[] { new Double(2.2) };
// Obtenemos los metodos que contiene la clase (puede clabiarse por el
// metodo classAutoSeguroDinamico.getMethod(name, parameterTypes);)
final Method[] metodosDeclarados = classContenedorMetodos.getDeclaredMethods();
// Buscamos nuestro metodo
Method metodoSetDescuento = null;
Method metodoGetDescuento = null;
for (final Method metodoDeclarado : metodosDeclarados) {
if ("setDescuento".equals(metodoDeclarado.getName())) {
metodoSetDescuento = metodoDeclarado;
} else if ("getDescuento".equals(metodoDeclarado.getName())) {
metodoGetDescuento = metodoDeclarado;
}
}
// Hacemos accesible nuestro metodo
metodoSetDescuento.setAccessible(Boolean.TRUE);
// invocamos metodo set pasando la nueva instacia y sus
// parametros
metodoSetDescuento.invoke(nuevaInstanciaReflection, parametros);
// Ejecutamos metodo get pasando la nueva instacia (no se envian
// parametros porque no es necesario)
final Object descuentoRecuperado = metodoGetDescuento.invoke(nuevaInstanciaReflection);
// Imprimimos nuestro valor de descuento recuperado
System.err.println("nuevo valor asginado: " + descuentoRecuperado);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment