【问题标题】:void Function(Subype) isn't a valid override of void Function(ParentType)void Function(Subype) 不是 void Function(ParentType) 的有效覆盖
【发布时间】:2020-10-31 09:03:05
【问题描述】:

我正在尝试创建一个父类型 (IDataProvider) 和一个子类型 (ILocalDataProvider),然后在一个类中,指定子类型来代替父类型。这就是我的意思:

abstract class IDataProvider {
  ValueType get<ValueType>(String keyToRead);
}

abstract class ILocalDataProvider extends IDataProvider {
  bool isKeyExistent(String key);
}

abstract class IDataSource {
  IDataProvider dataProvider;
}

class LocalDataSource implements IDataSource {
  LocalDataSource({@required this.dataProvider});

  @override
  ILocalDataProvider dataProvider; //*************** ERROR ON THIS LINE **********//
}

我收到此错误:

'LocalDataSource.dataProvider=' ('void Function(ILocalDataProvider)') 不是 'IDataSource.dataProvider=' 的有效覆盖('void 函数(IDataProvider)')。

我以为既然ILocalDataProvider是IDataProvider的子类型,那它就会被识别为IDataProvider??我做错了什么?

【问题讨论】:

标签: flutter dart


【解决方案1】:

你不能那样做。函数的签名必须完全匹配。但是,您可以使用这样的通用参数:abstract class IDataSource&lt;ProviderType extends IDataProvider&gt; {}

【讨论】:

  • 谢谢。所以父级将更改为:abstract class IDataSource&lt;ProviderType&gt; {,子级将被声明为class LocalDataSource implements IDataSource&lt;ILocalDataProvider&gt; {。我已经开始工作了,所以如果这是你的意思,我会接受。
  • 几乎。你这样做的方式,现在参数可以采用任何类型,这可能不是你想要的。要将泛型参数绑定到 IDataProvider,请执行以下操作: abstract class IDataSource
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2014-12-11
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多