Es fällt mir schwer, das herauszufinden. Sagen wir, ich habe den folgenden Code:
%Vor%Warum führt die Zuweisung zu einem Kompilierungsfehler? Der Fehler ist etwas wie:
%Vor% Nach meinem Verständnis von Kovarianz gibt die getMammals()
-Methode ein list
zurück, das immer Mammal
-Objekte enthält, so dass es zuweisbar sein sollte. Was vermisse ich?
Weil getMammals
ein List<Giraffe>
zurückgeben könnte, und wenn das in List<Mammal>
konvertierbar wäre, könntest du Zebra
hinzufügen. Sie können nicht Zebra
zu einer Liste von Giraffe
hinzufügen, oder?
Nun, so funktioniert es leider nicht.
Wenn Sie getMammals () so deklarieren, dass List<? extends Mammal>
zurückgegeben wird, bedeutet dies, dass es List<Mammal>
oder List<Giraffe>
, aber nicht List<Animal>
Ihr main () sollte so aussehen:
%Vor%EDIT: Was die Kovarianz betrifft, ist das normalerweise damit gemeint:
%Vor%Wie Sie sehen können, können Sie den Rückgabetyp der Methoden überladen, wenn Sie die Methode überschreiben.
Tags und Links java covariance