Mam klasę, która jest w zasadzie kopią innej klasy.Skopiuj wszystkie wartości z pól w jednej klasie do drugiej poprzez odbicie
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
drodze zaproszenia WebService. Teraz chciałbym stworzyć metodę refleksyjną, która zasadniczo kopiuje wszystkie pola, które są identyczne (według nazwy i typu) z klasy A
do klasy CopyA
.
Jak mogę to zrobić?
To jest to, co do tej pory miałem, ale to nie 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ż zrobił to jakoś
Zobacz również http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping –