Daniel Thoma: Methodenaufruf VOR Initialisierung ==> NullPointerException

Beitrag lesen

Hallo MudGuard,

Die Erzeugung der Instanz läuft in diesem Fall wie folgt ab:
1. Impliziter Konstruktor der Klasse RecordFilterTableModel wird aufgerufen.
2. Konstruktor der Klasse DefaultTableModel wird aufgerufen, der den Aufruf per this(...) ein paar mal weiterreicht.
3. Der Konstruktor von Object wird aufgerufen.
4. Instanzvariablen von Object werden initialisiert und der Konstruktor weiter ausgeführt.
5. Instanzvariablen von DefaultTableModel werden initialisiert und die Konstruktoren weiter ausgeführt.
6. Instanzvariablen von RecordFilterTableModel werden initialisiert und der Konstruktor weiter ausgeführt.
7. Neue Instanz wird zurückgegeben.

Das Problem ist jetzt, dass einer der Konstruktoren von DefaultTableModel die überschriebene Methode getColumnCount() aufruft zu einem Zeitpunkt, zu dem die Instanzvariablen von RecordFIlterTableModel noch nicht initialisiert wurden.
Das die Reihenfolge so ist, hat wohl den Grund, dass man einfach noch keinen Code in einer Kindklasse ausführen kann, wenn man die Elternklasse noch nicht initialisiert hat. Das würde noch sehr viel interessantere Effekte geben ;-)

Aus der Dokumentation von DefaultTableModel geht übrigens hervor, dass es Klüger ist, AbstractTableModel zu erweitern. DefaultTableModel ist dazu nicht gedacht, auch wenn einiges getan wurde, damit es nicht ganz nach hinten los geht.

Genauer steht der Instanzierungsvorgang in der Java VM Spezification beschrieben.

Grüße

Daniel