selbstreferentielle Methoden mit generischem Rückgabetyp für mehrere geerbte Klassen

8

Es ist wahrscheinlich ein bisschen schwierig zu beschreiben. Ich werde es aber versuchen;)

Dem fließenden Stil folgend ist es üblich, dass eine Methode einer Klasse die Klasseninstanz selbst (this) zurückgibt.

%Vor%

Wenn man eine solche fließende Stilklasse erweitert, könnte man dies im ersten Vererbungsschritt über einen generischen Typ relativ einfach machen und den Rückgabetyp auf diesen generischen Typ in der Superklasse umwandeln.

%Vor%

Wenn ich jedoch einen weiteren Vererbungsschritt für diese erweiterte Klasse mache, stoße ich auf Probleme, wenn ich versuche, den generischen Rückgabetyp der Methoden (in den höheren Klassen) und die Klassenbeschreibung selbst zu definieren, zB eine Methode in der Die Super-Super-Klasse würde nicht den Typ der Erweiterungsklasse, sondern den Typ der Superklasse zurückgeben. Meine Absicht war jedoch, dass diese fließenden Stilmethoden immer den Typ der aktuellen Klasse (und nicht die höheren Klassen) zurückgeben sollten.

So ist es möglich, eine Lösung durch die Verwendung von Generika zu definieren?

PS: Ich weiß, eine einfache Problemumgehung könnte alle diese Methoden in der erweiterten Klasse überschreiben und sie in den aktuellen Typ umwandeln. Ich bin jedoch an einer eleganteren Lösung interessiert;)

    
zazi 21.06.2012, 17:20
quelle

4 Antworten

3

könntest du versuchen:

%Vor%     
haed 20.07.2012, 15:40
quelle
1

Sie könnten so etwas tun:

%Vor%

Dies wird zurückkehren:

%Vor%     
Francisco Spaeth 21.06.2012 17:46
quelle
1

Es ist generell nicht möglich, den Typ der aktuellen Klasse zurückzugeben.

Selbst der Code, den Sie oben gepostet haben, ist unsicher: public class C extends A<B> ist legal, aber der Aufruf von doSomething() darauf, erwartet ein B , wird abstürzen.

    
newacct 21.06.2012 18:15
quelle
0

Verwenden Sie die Delegierung zum Implementieren erweiterbarer flüssiger Schnittstellen. Vorteile: keine Güsse. Nachteile: Ausführlich.

%Vor%     
Judge Mental 22.06.2012 18:05
quelle