Java generics - überschreiben einer abstrakten Methode und mit return-Typ der Unterklasse
Ich versuche zu erstellen, wo eine Reihe von Unterklassen einer Oberklasse überschreiben. Diese übergeordnete Klasse enthält eine abstrakte Methode - der Rückgabetyp von denen im Idealfall sein, dass das Objekt, von dem diese Methode aufgerufen wurde, so dass es verhält sich so:
public abstract class SuperClass{
public abstract SuperClass getSelf();
}
public class SubClass extends SuperClass{
@Override
public SubClass getSelf(){
return this;
}
}
Ich bin nicht sicher, ob so etwas möglich ist, wie ich denke, dass die Rückkehr-Typen haben immer das gleiche zu sein, um für das überschreiben zu arbeiten - jedoch denke ich die Antwort, sollte eine vorhanden ist, liegt irgendwo entlang dieser Linie...
public abstract class SuperClass{
public abstract <? extends SuperClass> getSelf();
}
public class SubClass extends SuperClass{
@Override
public SubClass getSelf(){
return this;
}
}
Vielen Dank für jede Hilfe.
edit: Hinzugefügt, erweitert Oberklasse zu Unterklasse, duh
InformationsquelleAutor der Frage Numeron | 2011-06-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktionieren wird:
Bemerken, die ich Hinzugefügt habe
extends SuperClass
zu IhremSubClass
definition. Der RückgabetypgetSelf
bezeichnet als kovariante Rückgabe-Typ.InformationsquelleAutor der Antwort Rob Harrop
Wie wäre es damit:
Ich weiß, es ist ziemlich wiederholend und nichts Grenzen, der Typ, der die gleichen
SubClass
Instanz, denn auchAnotherSubClass
Anforderungen an die gebunden, aber mindestens es sollte den trick tun.InformationsquelleAutor der Antwort plouh
Hier ist, wie es zu tun (Seit JDK 1.5 gibt es dieses Ding namens kovariante Rückgabetypen, wo so etwas möglich ist).
Ankündigung eine ähnliche Klasse generische definition mit Enum (http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html)
Sehen, was passiert hinter den kulissen (mit javap Oberklasse Unterklasse):
Beachten Sie, wie die Unterklasse die Methode hat einen anderen return-Typ, der ein Untertyp der super-Methode Rückgabetyp.
Btw, beachten Sie, dass
public SuperClass getSelf();
in der KlasseSubClass
ist eigentlich ein synthetischen Methode.InformationsquelleAutor der Antwort Nick