Last active
February 17, 2017 01:13
-
-
Save javerosanonimos/75641905eeadef1cbb714b1d5973c050 to your computer and use it in GitHub Desktop.
Código para ejecutar métodos con reflection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
@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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
@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