Ich habe Paare von Klassen, in denen die Felder von einer Teilmenge der Felder eines anderen ist und die Getter der Oberklassen alle vorhersagbar benannt sind (getFoo()
). Gibt es einen Weg zu effizient Kopieren Sie alle allgemeinen Felder über die Superset-Klasse in die Subset-Klasse, oder zumindest den Code dafür automatisch generieren.Copy Felder zwischen ähnlichen Klassen in Java
Ich sollte beachten, dass:
- Aus verschiedenen Gründen kann ich die Oberklassen nicht bearbeiten, noch kann ich sie nur in ganz nutzen zu vermeiden, dass die Datenkopie zu tun.
- Ich kann möglicherweise neue Methoden in den Subset-Klassen erstellen, aber ich kann ihre Felder nicht ändern.
- Wir haben Dutzende dieser Paare, und einige der Klassen haben viele viele Felder, so dass dies per Hand zu tun ist unhandlich, um es gelinde auszudrücken.
- Ein Kollege hat mit einem Verfahren kam eine allgemeine Kopiermethode zu erstellen, die Java-Reflexion nutzt alle zwei Klassen zu nehmen, durchlaufen die Felder wie Streicher, keine Manipulation String den Getter Namen zu bestimmen, und dann automatisch ausführen zu das Feld in der Teilmengenklasse. Es ist schrecklich, aber es scheint zu funktionieren. Ich hoffe wirklich, dass es einen besseren Weg gibt.
Edit: einige einfache Code wie gewünscht
public class SuperClass {
private int foo;
private int bar;
private float bat;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public float getBat() { return bat; }
}
public class SubClass {
private int foo;
private float bat;
}
//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }
// also acceptable would be some way to autogenerate all the assignment
// functions needed
Wenn Sie die Superset-Klassen bearbeiten könnten, könnten Sie sie einfach dazu bringen, Ihre Subset-Klassen zu erweitern und alle ihre Felder und Methoden in klassischer OO-Mode zu erben. Warum können Sie die Oberklassen nicht bearbeiten? – Asaph
@Asaph - leider sind die Oberklassen Teil einer externen Bibliothek, die separat entwickelt wurde und die ich jetzt in die Klassen umwandeln muss, die für dieses spezifische Projekt erstellt wurden, die nicht viel von den Informationen in den größeren verwenden . – Dusty
Was passiert, wenn Sie die Beziehung auf den Kopf stellen und Ihre Subset-Klassen von der Superset-Klasse erben lassen? Sie können alle Methoden in Bezug auf Felder, die Sie nicht benötigen, mit leeren Körpern überschreiben. Es ist nicht zu elegant, aber zumindest können Sie Code ohne Kopieren/Einfügen, Spiegeln oder Codegenerierung wiederverwenden. – Asaph