Tengo una clase que es básicamente una copia de otra clase.
public class A {
int a;
String b;
}
public class CopyA {
int a;
String b;
}
Lo que estoy haciendo es poner los valores de la clase A
en CopyA
antes de enviarlos CopyA
a través de una llamada de servicio web. Ahora me gustaría crear un método de reflexión que básicamente copia todos los campos que son idénticos (por nombre y tipo) de una clase A
a otra CopyA
.
¿Cómo puedo hacer esto?
Esto es lo que tengo hasta ahora, pero no funciona del todo. Creo que el problema aquí es que estoy tratando de establecer un campo en el campo que estoy recorriendo.
private <T extends Object, Y extends Object> void copyFields(T from, Y too) {
Class<? extends Object> fromClass = from.getClass();
Field[] fromFields = fromClass.getDeclaredFields();
Class<? extends Object> tooClass = too.getClass();
Field[] tooFields = tooClass.getDeclaredFields();
if (fromFields != null && tooFields != null) {
for (Field tooF : tooFields) {
logger.debug("toofield name #0 and type #1", tooF.getName(), tooF.getType().toString());
try {
// Check if that fields exists in the other method
Field fromF = fromClass.getDeclaredField(tooF.getName());
if (fromF.getType().equals(tooF.getType())) {
tooF.set(tooF, fromF);
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Estoy seguro de que debe haber alguien que ya haya hecho esto de alguna manera.