Die vererbte Methode hat den Referenztyp zurückgegeben

8

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:

  • Entfernen von @SuppressWarning
  • Entfernen von Abgüssen

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.

    
pnt 22.08.2013, 14:47
quelle

3 Antworten

9

Kein Cast, kein @SuppressWarning, nur wenige Zeilen:

%Vor%     
sp00m 22.08.2013, 15:56
quelle
5

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:

Rohit Jain 22.08.2013 15:24
quelle
1

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

%Vor%

Die Besetzung ist innerhalb der Standardmethode verborgen. Von der Quelle von Class .

%Vor%     
Sotirios Delimanolis 22.08.2013 15:17
quelle

Tags und Links