我正在寻找一种方法来列出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 {}
在上面的例子中,我没有看到迭代Bar
和Baz
的方法。我想我会寻找这样的东西:
main() {
switch (Foo.subtypes) {
case Bar():
print('bar');
case Baz():
print('baz');
}
}
Foo.subtypes
是无效的,但我希望有一种方法(除了使用镜像或给每个子类型一个enum
)。
1条答案
按热度按时间c9qzyr3d1#
没有这样的功能,它实际上是反射,只能通过
dart:mirrors
来完成。原因之一是没有一个 type 来表示密封类的泛型子类型的每个示例化。而且没有简单的方法来迭代类型(
Type
对象不是类型)。