首页 > 解决方案 > void Function(Subype) 不是 void Function(ParentType) 的有效覆盖

问题描述

我正在尝试创建一个父类型 ( 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 Function(IDataProvider)') 的有效覆盖。

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

标签: flutterdart

解决方案


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


推荐阅读