Hallo zusammen,
da ich mich selbst nicht mit dem Swing-Framework auskenne, hoffe ich hier eine Antwort auf eine Frage zu bekommen, die im Rahmen einer Sun-Schulung ungeklärt blieb.
In einem Schulungs-Beispiel wurde eine kleine GUI-Anwendung geschrieben. In dieser wurde eine Klasse A angelegt, die von JPanel erbt, sowie eine weitere Klasse B, die wiederum von A erbt.
Im Konstruktor von A wird die abstrakte Methode A#addComponents() aufgerufen, die von B implementiert wird. Es kam wie es kommen musste, in B#addComponents() wurde auf eine Objektvariable von B zugegriffen, die bei Instanzieren der Klasse A noch nicht initialisiert war und das Ergebnis war eine NullPointerException.
Die Teilnehmer der Schulung wiesen den Schulungsleiter dann darauf hin, dass es generell ein schlechtes Design ist, wenn aus einem Konstruktor nicht finale (oder abstrakte) Methoden aufgerufen würden.
Es stellt sich nun die Frage wie man das besser löst. Im SWT-Framework gibt es ja typischerweise eine Methode createContents() o.ä., die man in der abgeleiteten Klasse überschreibt und die dann vom Framework zur richtigen Zeit (aber eben nicht aus dem Konstruktor) aufgerufen wird. Wie würde man bei Swing vorgehen?
Danke im Voraus,
Ole
da ich mich selbst nicht mit dem Swing-Framework auskenne, hoffe ich hier eine Antwort auf eine Frage zu bekommen, die im Rahmen einer Sun-Schulung ungeklärt blieb.
In einem Schulungs-Beispiel wurde eine kleine GUI-Anwendung geschrieben. In dieser wurde eine Klasse A angelegt, die von JPanel erbt, sowie eine weitere Klasse B, die wiederum von A erbt.
Im Konstruktor von A wird die abstrakte Methode A#addComponents() aufgerufen, die von B implementiert wird. Es kam wie es kommen musste, in B#addComponents() wurde auf eine Objektvariable von B zugegriffen, die bei Instanzieren der Klasse A noch nicht initialisiert war und das Ergebnis war eine NullPointerException.
Die Teilnehmer der Schulung wiesen den Schulungsleiter dann darauf hin, dass es generell ein schlechtes Design ist, wenn aus einem Konstruktor nicht finale (oder abstrakte) Methoden aufgerufen würden.
Es stellt sich nun die Frage wie man das besser löst. Im SWT-Framework gibt es ja typischerweise eine Methode createContents() o.ä., die man in der abgeleiteten Klasse überschreibt und die dann vom Framework zur richtigen Zeit (aber eben nicht aus dem Konstruktor) aufgerufen wird. Wie würde man bei Swing vorgehen?
Danke im Voraus,
Ole