Wie implementieren Konstruktor für die erweiterte Klasse

Dies funktioniert:

class ABean implements A {
  protected String field1;
  ...
  protected String fieldn;

  public String getField1() {
   return field1;
  }
  ...
}


class BBean extends ABean {
  public BBean(A a) {
    super();
    this.field1=a.getField1();
    ...
    this.fieldn=a.getFieldn();
  }
}

Aber das schreiben dieser Konstruktor B(A a) ist umständlich, nicht wirklich praktisch ist, und fehleranfällig, denn wenn ich auf hinzufügen oder entfernen von Feldern in A, dann muss ich ändern, dass der Konstruktor und kann manchmal vergessen, initialisieren Sie einige der Felder, die im A.

Ich nehme an, dass ich umsetzen konnte-Klon für ABean, aber das hätte ähnliche Probleme (da die clone-Implementierung aktualisiert werden müssen, wenn ich Felder hinzufügen/entfernen) und das würde auch nicht zulassen, dass Sie mich eine BBean(A a) Konstruktor; nur ein BBean(ABean a) Konstruktor, es sei denn, ich mache die clone() Teil der Schnittstelle sind.

So... gibt es eine sauberere, bessere Art und Weise der Umsetzung BBean(A a)?

Welche Klassen haben Sie Zugang zu? Ein, ABean, BBean?
Ich habe Zugriff auf beide Klassen. Ich bin beginnen zu realisieren, dass ich vielleicht jagt ein Gespenst. Nachdem alle, es gibt viele Methoden, die Liste Felder explizit, wie gleich, hashCode, toString sogar... und das muss geändert werden, wenn neue Felder Hinzugefügt/entfernt. Der einzige Unterschied ist, dass diese Methoden werden automatisch erzeugt und mit Eclipse. Also keine Zauberformel, aber 2 Ansätze: Liste aller Felder explizit und verschieben Sie den code in Einen mit dem Ein-Konstruktor-Methode, die Sie vorschlagen, um zumindest die Lokalisierung der Feld ändert, oder verwenden Sie reflektion, wie vorgeschlagen von Edgard. Immer noch Fragen...

InformationsquelleAutor Lolo | 2013-02-14

Schreibe einen Kommentar