Können Sie die Standardmethode der übergeordneten Schnittstelle von einer Schnittstelle aus aufrufen, die diese Schnittstelle unterklassifiziert? [Duplikat]

8

In Java 8 habe ich so etwas:

%Vor%

Gibt es eine Möglichkeit, das Verhalten der Standardfunktionsschnittstelle von implementsB aufzurufen, ohne eine anonyme innere Klasse erstellen und diese aufrufen zu müssen?

Das hat einen Nebeneffekt (Aufruf der Methode von implementsA 2 mal), was ein Aufruf der Implementierung des Elternteils ist, und dann kann die Childs-Implementierung die Standardimplementierung des Kindes zusammen mit einer Spezialisierung aufrufen, falls erforderlich. Wie Sie sehen, ist das Aufrufen der Implementierung des Elternteils kinderleicht, aber ich sehe keine Möglichkeit, die Standardimplementierung nicht zu überschreiben, wenn ich der Klasse, die die untergeordnete Schnittstelle implementiert, eine indirekte Ebene hinzufügen und keine Möglichkeit, dies zu erzwingen .

Wenn beispielsweise ein entsperrter oder bereitgestellter Zugriff auf eine Ressource eine Datenbank sagt und B eine zweite Ressource (eine andere Datenbank) entsperrt, sehe ich keine Möglichkeit, Code freizuschalten A und dann B diesen Vertrag durch Verwendung von funktionalen Schnittstellen zu erzwingen erfordert, dass A und B aufgerufen werden. Eine Ebene tief, Sie können es tun, aber N Ebenen tief sieht aus wie es nicht möglich ist.

Ich wollte Lambdas verwenden, um teure Aufrufe zu vermeiden, aber um eine semantische Reihenfolge der Operationen für Benutzer meiner Bibliothek zu erzwingen.

Diese Frage ist nicht ganz ähnlich wie "Explizites Aufrufen einer Standardmethode in Java", da es sich bei dieser Frage um N-tiefe Ebenen handelt, die nicht nur die Standardmethode einer übergeordneten Schnittstelle aufrufen.

    
ggb667 17.06.2014, 21:34
quelle

1 Antwort

16

Sie können eine vererbte Methode interface default mit InterfaceName.super aufrufen. Die Regeln sind die gleichen wie für andere super Methodenaufrufe: Sie können die geerbte Methode aufrufen, die Sie überschrieben haben, aber Sie können nicht direkt die Methode aufrufen, die die geerbte Methode überschrieben haben könnte. ZB

%Vor%

Wenn jedoch jede überschreibende Methode ihre Supermethode aufruft, haben Sie eine Kette von Aufrufen. Beachten Sie jedoch, dass es sich um Schnittstellen handelt. Eine Implementierung kann immer eine Standardmethode außer Kraft setzen, ohne super aufzurufen.

    
Holger 18.06.2014, 08:15
quelle