Javakovarianz

7

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?

    
Amit G 26.07.2009, 11:12
quelle

2 Antworten

19

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?

%Vor%     
Daniel Earwicker 26.07.2009, 11:26
quelle
6

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>

zurückgeben kann

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.

    
Gregory Mostizky 26.07.2009 11:27
quelle

Tags und Links