3
我正在閱讀爲什麼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?似乎沒有明顯的違規行爲。