如何在具有通用类型的类中启用协方差?

时间:2019-07-16 09:01:22

标签: flutter dart

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是否允许您以某种方式允许协方差?

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/creating-variant-generic-interfaces

1 个答案:

答案 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中有效且不受支持的协方差类型