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?
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.
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.
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. :)
Tags und Links groovy