Mam klasę, która jest w zasadzie kopią innej klasy.
public class A {
int a;
String b;
}
public class CopyA {
int a;
String b;
}
Co robię jest wprowadzenie wartości z klasy A
do CopyA
przed wysłaniem CopyA
przez wywołanie WebService. Teraz chciałbym stworzyć metodę odbicia, która w zasadzie kopiuje wszystkie pola, które są identyczne (według nazwy i typu) z klasy A
do klasy CopyA
.
Jak mogę to zrobić?
To, co mam do tej pory, ale nie do końca działa. Myślę, że problem polega na tym, że próbuję ustawić pole na polu, przez które przechodzę.
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();
}
}
}
Jestem pewien, że musi być ktoś, kto już to zrobił