Ich habe eine Klasse, die im Grunde eine Kopie einer anderen Klasse ist.
public class A {
int a;
String b;
}
public class CopyA {
int a;
String b;
}
Was ich tue , ist , Werte aus der Klasse setzen A
in CopyA
vor dem Senden CopyA
über einen Webservice Aufruf. Jetzt möchte ich eine Reflexionsmethode erstellen, die grundsätzlich alle Felder kopiert, die (nach Name und Typ) von Klasse A
zu Klasse identisch sind CopyA
.
Wie kann ich das machen?
Das habe ich bisher, aber es funktioniert nicht ganz. Ich denke, das Problem hier ist, dass ich versuche, ein Feld auf dem Feld zu setzen, das ich durchlaufe.
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();
}
}
}
Ich bin sicher, es muss jemanden geben, der das schon irgendwie gemacht hat