Oop 使用泛型参数重写Dart方法

Oop 使用泛型参数重写Dart方法,oop,generics,dart,polymorphism,Oop,Generics,Dart,Polymorphism,在这种情况下,我从一个超类进行扩展,使用泛型键入方法,如下所示: 模型 抽象类超类{ //..... } 类子类扩展了超类{ INTA; int b; 字符串c; //.... } 控制器 抽象类A{ T getDoc(T doc); } B类扩展了A类{ t GETDOC(t doc){//< p>您不能缩小泛型类型的参数。类 b < /代码>保证(通过扩展类 a ),它可以/可以处理所有类型参数(和子类型!),类 < 可以处理。考虑以下情况: class OtherSubClass ex

在这种情况下,我从一个超类进行扩展,使用泛型键入方法,如下所示:

模型
抽象类超类{
//.....
}
类子类扩展了超类{
INTA;
int b;
字符串c;
//....
}
控制器
抽象类A{
T getDoc(T doc);
} 
B类扩展了A类{

t GETDOC(t doc){//< p>您不能缩小泛型类型的参数。类<代码> b < /代码>保证(通过扩展类<代码> a <代码>),它可以/可以处理所有类型参数(和子类型!),类<代码> < <代码>可以处理。考虑以下情况:

class OtherSubClass extends SuperClass {
  //....
}

void main() {
  var b = B();
  b.getDoc(OtherSubClass());
}

您希望发生什么?类
B
无法处理类型为
OtherSubClass
的对象,因此它打破了与类
A

的契约,我终于找到了一种方法:)

所以我希望类
B
的方法只接受扩展
子类的类型,但是类
A
方法的签名需要扩展类
超类的参数

为此,我做了以下工作:

模型
抽象类超类{
//.....
}
类子类扩展了超类{
INTA;
int b;
字符串c;
//....
}
控制器
抽象类A{
T getDoc(T doc);
} 
B类扩展了A类{
T getDoc(T doc){
//.......
}       
}

您能使用协变修饰符吗

在您的示例中:

abstract class A {
   T getDoc<T extends SuperClass>(covariant T doc);
} 
抽象类A{
T getDoc(协变doc);
} 

检查:

My bad,我已经编辑了类架构,并详细阐述了我试图实现的目标。请共享您的代码的粘贴库,我会查看一下。我发现了错误。是因为我的抽象类a从StatefulWidget扩展并实现了状态类。类AState扩展了状态现在我需要修复此问题