Wieso fehlt beim Aufruf von Super in Groovy (Version 2.4.5) die Elternklasse?

9

Angesichts der folgenden Anordnung von Klassen:

%Vor%

und dann mit ihnen auf diese Weise:

%Vor%

Ich würde erwarten zu sehen:

%Vor%

als Ausgabe des letzten println. Stattdessen sehe ich:

%Vor%

Dies steht im Gegensatz zu dem Verhalten der ChildInitAndVisit-Klasse und unterscheidet sich von dem Verhalten unter älteren Versionen von Groovy - ich habe 2.3.4 überprüft.

Ist das ein Groovy-Bug? Oder sollte ich etwas anderes machen?

    
Bimal Shah 17.11.2015, 18:43
quelle

2 Antworten

2

Meiner Meinung nach ist es ein Fehler. super.init() in ChildVisitOnly muss Parent # init () aufrufen.

    
blackdrag 18.11.2015 10:44
quelle
1

Ich glaube, das ist Multi-Methoden (Runtime / Dynamic Dispatch) Verhalten von Groovy. Zur Laufzeit wird init() von GrandParent anstelle von init() von Parent verwendet.

Eine Möglichkeit, sie auf Java-Art zu verwenden (Kompilierzeit-Versand), ist die Verwendung von @CompileStatic in ChildVisitOnly class.

%Vor%

Oben würde das Ergebnis ergeben, das Sie erwarten.

Ein anderer Ansatz wäre, init() oder this.init() in ChildVisitOnly explizit anstelle von @CompileStatic zu verwenden, um die Verwendung von init() von Parent zu erzwingen.

%Vor%

Das weicht offensichtlich von dem Verhalten von Groovy 2.3.4 ab, aber ich muss noch ein verwandtes Thema finden, das sich auf diesen Unterschied konzentriert. Ich bin gespannt, ob mich jemand anders auf einen Defekt hinweisen kann, aufgrund dessen sich das Verhalten geändert hat. :)

    
dmahapatro 18.11.2015 01:05
quelle

Tags und Links