為什么這個泛型類會拋出錯誤?因為T extends DataModel,它應該允許分配實體DataModel但不是。
class TestClass<T extends DataModel> {
List<T> variablesList = [];
late T variable;
void run() {
variablesList.add(DataModel(id: '', name: '', value: '')); // error
variable = DataModel(id: '', name: '', value: ''); // error
}
void run2() {
variablesList.add(DateModelImpl(id: '', name: '', value: '')); // error
variable = DateModelImpl(id: '', name: '', value: ''); // error
}
}
class DataModel {
final String id;
final String name;
final String value;
DataModel({
required this.id,
required this.name,
required this.value,
});
}
class DateModelImpl extends DataModel {
DateModelImpl({
required String id,
required String name,
required String value,
}) : super(id: id, name: name, value: value);
}
錯誤:
不能將引數型別“DataModel”分配給引數型別“T”。
不能將引數型別“DateModelImpl”分配給引數型別“T”。
uj5u.com熱心網友回復:
由于 T 擴展了 DataModel,它應該允許分配 DataModel 的實體,但不是。
不,不應該。這很簡單: APack<Wolf>類似于Pack<T extends Animal>,但這并不意味著您可以將任何動物添加到狼群中,也不能將任何不是 wolf(可以說Sheep)的 Animal 派生類添加到 a 中Pack<Wolf>。只能Wolf添加另一個。如果您希望能夠添加任何動物,也許泛型不是可行的方法,您應該使用介面或基類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348576.html
下一篇:邏輯上,doublesumOfList(List<?extendsDouble>list)會使函式變成只讀模式,為什么list.remove()可以編譯成功
