Dart列出所有密封子类型

puruo6ea  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在寻找一种方法来列出Dart中的所有sealed子类型,就像Enum.values的等价物一样,但对于sealed子类型。
例如,enum的行为如下:

enum Foo { bar, baz }

main() {
  for (final value in Foo.values) {
    switch (value) {
      case Foo.bar:
        print('bar');
      case Foo.baz:
        print('baz');
    }
  }
}

// Prints:
// bar
// baz

但是如果我有一个sealed类,它有多个子类型:

sealed class Foo {}
class Bar extends Foo {}
class Baz extends Foo {}

在上面的例子中,我没有看到迭代BarBaz的方法。我想我会寻找这样的东西:

main() {
  switch (Foo.subtypes) {
    case Bar():
      print('bar');
    case Baz():
      print('baz');
  }
}

Foo.subtypes是无效的,但我希望有一种方法(除了使用镜像或给每个子类型一个enum)。

c9qzyr3d

c9qzyr3d1#

没有这样的功能,它实际上是反射,只能通过dart:mirrors来完成。
原因之一是没有一个 type 来表示密封类的泛型子类型的每个示例化。而且没有简单的方法来迭代类型(Type对象不是类型)。

相关问题