[英]Is it possible to create a List in Flutter/Dart with more than one type?
假设两个不相关的类(来自Flutter库等):
class A {
String name;
}
class B {
int age;
}
是否可以拥有List<A/B>
? 我知道可以使用List<dynamic>
但这样也可以接受Cs,Ds和Zs。
您可以为A
和B
创建父抽象类,并添加一个仅允许来自父类的子项的List
。
abstract class Foo {
}
class A extends Foo {
}
class B extends Foo {
}
class C {
}
这是对的:
List<Foo> items = [A(), B()];
事实并非如此
List<Foo> items = [A(), B(),C()];
您可以使用自己的变量或使用runtimeType
来识别类型
for(Foo item in items){
print(item.runtimeType);
}
另一种选择(长版)
class Bar {
final A a;
final B b;
Bar({this.a, this.b}) {
if (a == null && b == null || a != null && b != null) throw ArgumentError("only one object is allowed");
}
}
class A {
}
class B {
}
class C {
}
用法
List<Bar> items = [Bar(a: A()), Bar(b: B())];
for(Bar item in items){
if (item.a != null) print("Item : ${item.a}");
if (item.b != null) print("Item : ${item.b}");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.