Java-Kovarianz
Es fällt mir schwer, das herauszufinden. Angenommen, ich habe den folgenden Code:
class Animal { }
class Mammal extends Animal { }
class Giraffe extends Mammal { }
...
public static List<? extends Mammal> getMammals() { return ...; }
...
public static void main(String[] args) {
List<Mammal> mammals = getMammals(); // compilation error
}
Warum führt die Zuweisung zu einem Übersetzungsfehler? Der Fehler ist so etwas wie:
Type mismatch: cannot convert from List<capture#4-of ? extends Mammal> to List<Mammal>
Nach meinem Verständnis von Kovarianz ist diegetMammals()
Methode gibt a zurücklist
das wird immer enthaltenMammal
Objekte, so sollte es zuweisbar sein. Was vermisse ich?