是否可以在Flutter / Dart中创建一种以上类型的列表?

时间:2019-06-10 03:46:31

标签: flutter dart

假定两个不相关的类(来自Flutter库等):

class A {
   String name;
}

class B {
   int age;
}

是否可以使用List<A/B>?我知道可以使用List<dynamic>,但是这样也可以接受C,D和Z。

1 个答案:

答案 0 :(得分:5)

您可以为AB创建父抽象类,并添加一个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}");
  }