Pet<String> pet = Dog<String>();
给了我一个invalid_assignment错误。
class Pet<T> {
T name;
}
class Dog<T> extends Pet {}
class Cat<T> extends Pet {}
main() {
Pet<String> pet = Dog<String>();
List<Pet> pets = List<Dog>();
}
List<Pet> pets = List<Dog>();
有效
如何允许Pet<String> pet = Dog<String>();
行正确运行?我认为这是协方差,并且我认为在本文中它解释了如何在c#中执行此操作。 Dart是否允许您以某种方式允许协方差?
答案 0 :(得分:1)
您需要为类及其扩展的类型添加相同的泛型。
class Pet<T> {}
class Dog<T> extends Pet<T> {}
然后允许
Pet<String> pet = Dog<String>();
因为通用类型Dog
的{{1}}扩展了通用类型String
的{{1}}。
您写的(缺少Pet的通用类型)
Pet
所以
实例化String
与
class Dog<T> extends Pet {}
Dog()
,因为如果未指定泛型,则这是泛型的默认类型;向下转换似乎不是Dart中有效且不受支持的协方差类型