【发布时间】:2017-07-26 23:49:10
【问题描述】:
我正在阅读为什么 Java 中的数组协方差不好 (Why are arrays covariant but generics are invariant?)。如果Dog 是Animal 的子类型,则Dog[] 是Animal[] 的子类型。这是一个问题,因为可以这样做:
Animal[] animals = new Dog[1];
animals[0] = new Cat();
这与“正确”实现的泛型不同。 List<Dog> 不是 List<Animal> 的子类型
我试图了解它为什么不好的本质,并且刚刚阅读了有关 LSP 的信息。它是否以任何方式违反了 LSP?似乎没有明显的违规行为。
【问题讨论】:
标签: generics covariance language-design solid-principles liskov-substitution-principle