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 是否允许您以某种方式允许协方差?
您需要向类及其扩展的类型添加相同的泛型。
class Pet<T> {}
class Dog<T> extends Pet<T> {}
这然后允许
Pet<String> pet = Dog<String>();
因为Dog
泛型类型String
扩展Pet
了泛型类型String
。
你写的(缺少来自 Pet 的泛型类型)
class Dog<T> extends Pet {}
所以实例化Dog()
将与
Dog<String> extending Pet<dynamic>
dynamic
因为如果没有指定,那是泛型的默认类型;向下转换它似乎不是 Dart 中有效且受支持的协方差类型
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句