私はなぜJavaで配列の共分散が悪いのかを読んでいました(Why are arrays covariant but generics are invariant?)。 Dog
がAnimal
のサブタイプである場合、Dog[]
はAnimal[]
のサブタイプです。このようなことを行うことができますので、これは問題です:Java配列の共分散はLiskovの置換原理に違反していますか?
Animal[] animals = new Dog[1];
animals[0] = new Cat();
これは「正常」に実装されたジェネリック医薬品とは異なります。 A List<Dog>
は、List<Animal>
のサブタイプではありません
私はなぜそれが悪いの本質を理解しようとしていた、ちょうどLSPについて読んでいた。それは何らかの形でLSPに違反しましたか?明確な違反はないようです。