flutter - 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 吗??我究竟做错了什么?
解决方案
你不能那样做。函数的签名必须完全匹配。但是,您可以使用这样的通用参数:abstract class IDataSource<ProviderType extends IDataProvider> {}
推荐阅读
- wordpress - Wordpress 分页在第 10 页后停止工作
- laravel - Phpunit 命令在 laravel 中显示错误
- c# - 无法在令牌响应中显示其他属性
- ios - How to manage Auto Renewable subscription dynamically iOS?
- java - 获取带有空检查和功能的流以使用 orElse() 和 orElseThrow() 进行集合
- postgresql - 如何在 PostgreSQL 中使用动态列名
- python-3.x - 如何使用 Python 自动点击图标?
- angular - ng build --prod --configuration=production --base-href /folder_name/ --aot 不使用 Angular 6 生成唯一哈希
- android - RxAndroid:进行 2 次 api 调用,合并结果,即使两者都失败,也应该只触发一次 onError
- c++ - O(1) 反向字符串