Flutter 空函数(子类型)为';t无效函数的有效重写(父类型)
我正在尝试创建父类型(Flutter 空函数(子类型)为';t无效函数的有效重写(父类型),flutter,dart,Flutter,Dart,我正在尝试创建父类型(IDataProvider)和子类型(ILocalDataProvider),然后在类中指定子类型来代替父类型。我的意思是: abstract class IDataProvider { ValueType get<ValueType>(String keyToRead); } abstract class ILocalDataProvider extends IDataProvider { bool isKeyExistent(String key)
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 **********//
}
抽象类IDataProvider{
ValueType获取(字符串键读取);
}
抽象类ILocalDataProvider扩展IDataProvider{
bool iskeyexisting(字符串键);
}
抽象类IDataSource{
IDataProvider数据提供者;
}
类LocalDataSource实现IDataSource{
LocalDataSource({@required this.dataProvider});
@凌驾
ILocalDataProvider dataProvider;//*************此行出错**********//
}
我得到了这个错误:
'LocalDataSource.dataProvider='('void函数(ILocalDataProvider)')
不是对“IDataSource.dataProvider=”(“void”)的有效重写
功能(IDataProvider)')
我认为由于ILocalDataProvider是IDataProvider的一个子类型,它将被识别为IDataProvider??我做错了什么?你不能那样做。函数的签名必须完全匹配。但是,您可以使用这样的泛型参数:
抽象类IDataSource{}
谢谢。因此父类将被更改为:抽象类IDataSource{
,子类的声明如下类LocalDataSource实现IDataSource{
。我已经开始工作了,所以如果这是你的意思,我会接受。几乎。按照你的方式,现在参数可以采用任何类型,这可能不是你想要的。要将泛型参数绑定到IDataProvider,请执行以下操作:抽象类IDataSourceWorks很棒。谢谢!请参阅和。