我想要一個自定義類,我可以在其中傳遞我的泛型引數的型別
是否可以這樣做或者我必須使用動態型別?
是否有與此等效的:Team|Site item;
或者我需要使用這個:dynamic item;
class Site {
String name;
int levels;
Site({
required this.name,
required this.levels,
});
}
class Team {
String name;
String description;
Team({
required this.name,
required this.description,
});
}
class CustomItem {
// Related line
Team|Site item;
CustomItem({
required this.item,
});
getName() {
print(item.name);
}
}
void main() {
final team = Team(name: 'dev', description: 'a team of dev');
final site = Site(name: 'paris', levels: 6);
final customTeam = CustomItem(item: team);
final customSite = CustomItem(item: site);
customTeam.getName();
customSite.getName();
}
uj5u.com熱心網友回復:
從 Flutter 2.10.3 開始,此功能尚不存在,但有兩種解決方法。
如果你只需要對一個類進行這種特殊處理,#1 可以正常作業,但很難維護。
#2 是一個更好的解決方案——易于擴展、重用和理解。
1.使用動態屬性并轉換item型別。
class CustomItem {
// Related line
dynamic item;
CustomItem({
required this.item,
});
String getName() {
switch (item.runtimeType) {
case Site:
return (item as Site).name;
case Team:
return (item as Team).name;
default:
return ''; // or throw error
}
}
}
- 使用具有相同屬性名稱的抽象類。
abstract class ItemWithName {
String name;
ItemWithName({required this.name});
}
class Site extends ItemWithName {
int levels;
Site({
required name,
required this.levels,
}) : super(name: name);
}
class Team extends ItemWithName {
String description;
Team({
required name,
required this.description,
}) : super(name: name);
}
class CustomItem {
// Related line
ItemWithName item;
CustomItem({
required this.item,
});
String getName() {
return item.name;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/449856.html
下一篇:如何在字串串列中回傳未來串列?
