Oop 覆盖参数类型?

Oop 覆盖参数类型?,oop,dart,Oop,Dart,我想在方法的子类中重写方法的参数类型,我认为泛型可以用于此,但这似乎不起作用(至少不是我现在的方式) 抽象类A{ bool-someMethod(tx); } 然后像这样覆盖它: class B extends A { bool someMethod<bool>(bool x) { // error: isn't a valid override } } B类扩展了A类{ 布尔方法(布尔x){ //错误:不是有效的覆盖 } } 对于参数类型,我不得不默认使用ty

我想在方法的子类中重写方法的参数类型,我认为泛型可以用于此,但这似乎不起作用(至少不是我现在的方式)

抽象类A{
bool-someMethod(tx);
}
然后像这样覆盖它:

class B extends A {
  bool someMethod<bool>(bool x) {
    // error: isn't a valid override
  }
}
B类扩展了A类{
布尔方法(布尔x){
//错误:不是有效的覆盖
}
}
对于参数类型,我不得不默认使用type
dynamic x
,但这将放弃运行时安全检查,并意味着无论何时实现该方法,都要进行大量类型检查


这种类型的扩展可能吗?

可能,但不是您的方式。 您声明的是一个泛型方法,其中每个调用都将类型参数传递给函数

您可能想要的是:

抽象类A{
bool-someMethod(tx);
}
B类扩展了A类{
布尔方法(布尔x){
返回true;
}
}
这使得类型成为子类的参数,而不是方法,因此每个子类都可以定义自己的类型

(在这里,您会遇到Dart协变泛型的问题,因为您可以编写:

A=B();
a、 someMethod(“a”);//运行时错误。

您的类型变量只出现在需要该类型的值的地方,而不是提供该类型的值的地方,因此强制转换到超类
a
会使该方法比它所能支持的更宽松。编译器会在参数上插入运行时类型检查,这就是这里的示例代码所遇到的。)

这是可能的,但不是你做这件事的方式。 您声明的是一个泛型方法,其中每个调用都将类型参数传递给函数

您可能想要的是:

抽象类A{
bool-someMethod(tx);
}
B类扩展了A类{
布尔方法(布尔x){
返回true;
}
}
这使得类型成为子类的参数,而不是方法,因此每个子类都可以定义自己的类型

(在这里,您会遇到Dart协变泛型的问题,因为您可以编写:

A=B();
a、 someMethod(“a”);//运行时错误。
您的类型变量只出现在需要该类型的值的地方,而不是提供该类型的值的地方,因此强制转换到超类
a
会使方法比它所能支持的更宽松。编译器会在参数上插入一个运行时类型检查,这就是这里的示例代码所遇到的。)

class B extends A {
  bool someMethod<bool>(bool x) {
    // error: isn't a valid override
  }
}