2010-08-14 2 views
11

Ich habe eine Klasse A und BM erstreckt A. Jetzt möchte ich ein Konstruktor von B erstellen mit Codegenerierung Option von Eclipse, die akzeptiert Parameter und Sollwerte aller Felder von B (ich meine es sollte Legen Sie auch Felder fest, die von A geerbt wurden.wie generieren Konstrukteuren in Eclipse

Gibt es eine Verknüpfung solchen Code in Eclipse zu generieren?

Antwort

6

Eklipse (3.5) hat keine für diesen speziellen Fall in Option gebaut, aber ich würde auf jeden Fall empfehlen, dass Sie einen separaten Konstruktor in der Superklasse haben, die die Unterklasse durch super(...) in seinem Konstruktor aufruft.

Dies wäre leichter zu pflegen. Wenn Sie beispielsweise ein Feld in der Superklasse hinzufügen, müssen Sie daran denken, die Unterklasse ebenfalls zu aktualisieren.

class A { 
    int i; 
    public A(int i) { this.i = i; } 
} 

class B extends A { 
    int j; 
    public B(int i, int j) { 
     super(i); 
     this.j = j; 
    } 
} 
21

rechts im Editor klicken und klicken Sie auf "Source -> Gene Constructor Felder mit". Sie können den zu verwendenden Superkonstruktor auswählen und auch Instanzvariablen auswählen, die dem Konstruktor hinzugefügt werden sollen.

+1

Aber es wird nicht Initialisierung für öffentliche/geschützte Mitglieder der Superklasse erzeugen, die ich nehme an, was der OP nach ist. – aioobe

+0

@aioobe - Einverstanden, das war der Hauptpunkt der Akshays Frage. –

2

Es gibt keine automatische Möglichkeit, es zu tun, und ich bin in der Nähe zu glauben, dass das Eclipse-Team dies absichtlich tat, wie es ihrem schlechtes Design führen würde.

Konstruieren einer Klasse ist über die Initialisierung der Objekte eigenen nur Felder. Wenn Sie (init) Felder für die Superklasse setzen müssen, rufen Sie den superclasses-Konstruktor auf. Wenn Sie Superklassenfelder ändern müssen, rufen Sie die superclasses-Methoden getter und setter auf.

Für mich ist es schlechtes Design Super Felder init und leicht vermieden werden können.