Un ejemplo sencillo de Refactorización y Genericos
public class Refactorizador<K, V> {
public V copyFromBeans(K k, V v) {
try {
Class claseK = k.getClass();
Class claseV = v.getClass();
Method[] metodosK = claseK.getMethods();
for (Method method : metodosK) {
if (isGetter(method)) {
Method metodoGetK = claseK.getDeclaredMethod(method.getName());
Method metodoSetV = claseV.getDeclaredMethod(changeGetBySet(method.getName()), method.getReturnType());
metodoSetV.invoke(v, metodoGetK.invoke(k));
}
}
} catch (Exception e) {
System.out.println("refactorizador() " + e.getLocalizedMessage());
}
return v;
}
public boolean isGetter(Method method) {
if (!method.getName().startsWith("get")) {
return false;
}
if (method.getName().startsWith("getClass")) {
return false;
}
if (method.getParameterTypes().length != 0) {
return false;
}
if (void.class.equals(method.getReturnType())) {
return false;
}
return true;
}
public boolean isSetter(Method method) {
if (!method.getName().startsWith("set")) {
return false;
}
if (method.getParameterTypes().length != 1) {
return false;
}
return true;
}
/**
* cambia el metodo get por set
*
* @param metodo
* @return
*/
public String changeGetBySet(String metodo) {
try {
metodo = metodo.replace("get", "set");
} catch (Exception e) {
System.out.println("changeGetBySet()" + e.getLocalizedMessage());
}
return metodo;
}
}
Clases:
public class Persona{
private String nombre;
private String direccion;
//get/set
}
public class Generales{
private String nombre;
private String direccion;
//get/set
}
Uso:
Copia el contenido de la clase Persona a la clase Generales
Refactorizador refactorizador = new Refactorizador();
Persona persona = new Persona();
persona.setNombre("X12");
persona.setDireccion("Panama");
Generales generales = new Generales();
generales= (Generales) refactorizador.copyFromBeans(persona,generales);
public class Refactorizador<K, V> {
public V copyFromBeans(K k, V v) {
try {
Class claseK = k.getClass();
Class claseV = v.getClass();
Method[] metodosK = claseK.getMethods();
for (Method method : metodosK) {
if (isGetter(method)) {
Method metodoGetK = claseK.getDeclaredMethod(method.getName());
Method metodoSetV = claseV.getDeclaredMethod(changeGetBySet(method.getName()), method.getReturnType());
metodoSetV.invoke(v, metodoGetK.invoke(k));
}
}
} catch (Exception e) {
System.out.println("refactorizador() " + e.getLocalizedMessage());
}
return v;
}
public boolean isGetter(Method method) {
if (!method.getName().startsWith("get")) {
return false;
}
if (method.getName().startsWith("getClass")) {
return false;
}
if (method.getParameterTypes().length != 0) {
return false;
}
if (void.class.equals(method.getReturnType())) {
return false;
}
return true;
}
public boolean isSetter(Method method) {
if (!method.getName().startsWith("set")) {
return false;
}
if (method.getParameterTypes().length != 1) {
return false;
}
return true;
}
/**
* cambia el metodo get por set
*
* @param metodo
* @return
*/
public String changeGetBySet(String metodo) {
try {
metodo = metodo.replace("get", "set");
} catch (Exception e) {
System.out.println("changeGetBySet()" + e.getLocalizedMessage());
}
return metodo;
}
}
Clases:
public class Persona{
private String nombre;
private String direccion;
//get/set
}
public class Generales{
private String nombre;
private String direccion;
//get/set
}
Uso:
Copia el contenido de la clase Persona a la clase Generales
Refactorizador refactorizador = new Refactorizador();
Persona persona = new Persona();
persona.setNombre("X12");
persona.setDireccion("Panama");
Generales generales = new Generales();
generales= (Generales) refactorizador.copyFromBeans(persona,generales);
Comments