Ich stehe vor dem in diese Frage , möchte aber (falls möglich) eine Lösung finden, ohne alle Casts und @SuppressWarning-Annotationen.
Eine bessere Lösung wäre eine, die auf dem referenzierten aufbaut:
Die hier vorgestellten Lösungen werden anhand der Kriterien mit zwei Punkten bewertet. Bounty löst die meisten Punkte oder die "eleganteste", wenn es mehr als einen mit 2 Punkten gibt.
Ein Ansatz besteht darin, eine abstrakte Methode getThis()
in Parent
-Klasse zu definieren und alle Child
-Klassen dazu zu bringen, sie zu überschreiben und die this
-Referenz zurückzugeben. Dies ist eine Möglichkeit, den Typ von this
-Objekt in einer Klassenhierarchie wiederherzustellen.
Der Code würde so aussehen:
%Vor%Je nach Anforderung gibt es kein Casting und kein @SuppressWarnings . Ich habe diesen Trick vor ein paar Tagen aus Angelika Langer - Java Generics FAQ gelernt.
Referenz:
Eine Lösung besteht darin, die Methode in der Kindklasse zu überschreiben und den Rückgabetyp in einen spezifischeren zu ändern, z. der Kindtyp Dies erfordert ein Casting. Verwenden Sie statt der typischen (Child)
-Ausführung das Class#cast(Object)
Methode
Die Besetzung ist innerhalb der Standardmethode verborgen. Von der Quelle von Class
.
Tags und Links java inheritance generics