Je lisais pourquoi la covariance de tableau dans Java est mauvaise (Why are arrays covariant but generics are invariant?). Si un Dog
est un sous-type de Animal
, un Dog[]
est un sous-type de Animal[]
. C'est un problème parce que des choses comme ceci peuvent être faites:La covariance du tableau Java est-elle contraire au principe de substitution de Liskov?
Animal[] animals = new Dog[1];
animals[0] = new Cat();
Ceci est différent des génériques qui ont été implémentés 'correctement'. Un List<Dog>
n'est pas un sous-type de List<Animal>
J'essayais de comprendre l'essence de la raison pour laquelle il est mauvais et je venais de lire à propos de LSP. At-il violé le LSP de quelque façon que ce soit? Il ne semble pas y avoir de violation claire.