Dart中泛型类的一个参数有多个类型



我想要一个自定义类,在那里我可以传递泛型参数的类型

有可能这样做吗?或者我必须使用动态类型?

有类似的东西吗: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();
}

从Flutter 2.10.3开始,该功能还不存在,但有两种解决方法。

如果您只需要对一个类进行这种特殊处理,#1可以很好地工作,但很难维护。

#2是一个更好的解决方案——易于扩展、重用和理解。

1.使用dynamic属性并转换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
}
}
}
  1. 使用具有相同属性名称的抽象类
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;
}
}

最新更新