【发布时间】:2021-11-21 09:08:41
【问题描述】:
我正在使用实体和模型。 基本上,我的实体描述了我的数据应该是什么样子,我的模型扩展了这些实体并具有 toMap 函数将它们转换为 json 对象。
所以我有 2 个实体,Car 和 Brand,其中一个 Car 属性是 Brand 类型。
class Car {
final String name;
final Brand brand;
const Car({
required this.name,
required this.brand,
});
}
class Brand {
final String label;
final String color;
const Brand({
required this.label,
required this.color,
});
}
然后我有 2 个模型 CarModel 和 BrandModel,分别扩展 Car 和 Brand。
class CarModel extends Car {
CarModel({
required String name,
required BrandModel brand,
}) : super(
name: name,
brand: brand,
);
Map<String, dynamic> toMap() {
return {
'name': name,
'brand': brand,
};
}
}
class BrandModel extends Brand {
BrandModel({
required String label,
required String color,
}) : super(
label: label,
color: color,
);
Map<String, dynamic> toMap() {
return {
'label': label,
'color': color,
};
}
}
如您所见,在CarModel 中,我希望brand 属性具有BrandModel 类型。
但是,它需要它的超类类型。
所以最后,我的CarModel 中的brand 属性的类型为Brand。
我的问题是在 toMap 函数中,我想像这样使用brand.toMap:
Map<String, dynamic> toMap() {
return {
'name': name,
'brand': brand.toMap(), // <= I want to use toMap() here, so I need brand to be of type BrandModel
};
}
有没有办法强制我的子类对从超类继承的属性具有不同的类型?
【问题讨论】:
标签: flutter class dart inheritance types