Die return-Typen sind unverträglich für die geerbten Methoden
class A {
public A get() { }
}
class B extends A {
}
Die return-Typen sind unverträglich für die geerbten Methoden,
wie dieses problem zu lösen ?
Welche Java-version verwenden Sie?
sorry, korrigiert, Beispiel ;@
Sie möchten etwas schreiben, wie
Nicht sicher, was Sie versuchen zu erreichen, aber der code-snippet, das Sie einfügen, nicht kompiliert.
Die return-Typen? Ganze compiler-Meldung mit Zeilennummern, und wo Sie zu finden. Ein kurzes Beispiel, in dem wir den Fehler reproduzieren können.
sorry, korrigiert, Beispiel ;@
Sie möchten etwas schreiben, wie
B b = new B().get();
ohne explizites casting?Nicht sicher, was Sie versuchen zu erreichen, aber der code-snippet, das Sie einfügen, nicht kompiliert.
public A get()
hat einen Rückgabetyp, aber wieder nichts für den Anfang...Die return-Typen? Ganze compiler-Meldung mit Zeilennummern, und wo Sie zu finden. Ein kurzes Beispiel, in dem wir den Fehler reproduzieren können.
InformationsquelleAutor nabil | 2012-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom JDK 5, Java ermöglichen Ihnen die änderung der Rückgabetyp einer überschriebenen Methode, solange der neue Typ ist eine Unterklasse des ursprünglichen.
Dies wird als kovariante Rückgabe-Typ.
Folgenden code ordnungsgemäß kompiliert:
Denken Sie daran, dass der Rückgabetyp der überschriebenen Methode eine Unterklasse der return-Typ, Ihnen zu erlauben, rufen Sie die Methode auf Einer Variablen und erhalten eine gültige Ein Objekt (das ist in der Tat eine B-Instanz):
InformationsquelleAutor Andrea Parodi
Generika verwendet werden:
InformationsquelleAutor Eugene Retunsky
Ich nehme an, Sie wollen etwas schreiben wie
B b = new B().get();
ohne explizites typecasting wie Nikita Beloglazov schlägt, wenn das nicht ein idiom, das Java unterstützt. Eugene die Antwort funktioniert gut genug, obwohl, dass, beinhaltet eine Besetzung zuT
und erzeugt eine hässliche compiler-Warnung neben. Persönlich würde ich den code schreiben, mehr wie die folgenden:Du noch nicht
B b = new B().get();
, aber Sie tun könnenB b = new B().getB();
, das ist genauso einfach und ein bisschen mehr selbst dokumentieren sowieso, da Sie bereits wissen, Sie wollen einB
Objekt, nicht nur alleA
Objekt. UndA a = new B().get();
würde ein B-Objekt, wenn auch eine, die nur Zugriff auf die Methoden deklariert, die inA
.InformationsquelleAutor Matt Leidholm