gpt4 book ai didi

dart - 在 Dart 中打开类类型

转载 作者:行者123 更新时间:2023-12-04 00:21:20 26 4
gpt4 key购买 nike

我正在寻找在 Dart 父类(super class)中编写一个函数,该函数根据实际使用它的子类采取不同的操作。像这样的东西:

class Foo {
Foo getAnother(Foo foo) {
var fooType = //some code here to extract fooType from foo;
switch (fooType) {
case //something about bar here:
return new Bar();
case //something about baz here:
return new Baz();
}
}
}

class Bar extends Foo {}

class Baz extends Foo {}

我的想法是我有一些对象并且想要获得相同(子)类的新对象。

主要问题是应该使用什么类型 fooType是?我的第一个想法是符号,它会导致简单的案例陈述,如 case #Bar: ,但我不知道如何填充 fooType带有符号。我能想到的唯一选择是执行 Symbol fooType = new Symbol(foo.runtimeType.toString()); 之类的操作。但我的理解是 runtimeType.toString()转换为javascript时将不起作用。你可以通过使用 Mirrors 来解决这个问题,但这意味着它是一个轻量级的库,所以这些不在桌面上。 Object.runtimeType返回 Type 的某些内容类,但我不知道如何创建 Type 的实例我可以用于案例陈述。也许我错过了更适合这个的 Dart 库的其他部分?

最佳答案

您可以使用 runtimeTypeswitch :

class Foo {
Foo getAnother(Foo foo) {
switch (foo.runtimeType) {
case Bar:
return new Bar();
case Baz:
return new Baz();
}
return null;
}
}
case声明类名直接使用(AKA 类文字)。这给出了 Type对应于提到的类的对象。因此 foo.runtimeType可以与指定的类型进行比较。
请注意 you can not use generics for now在类文字中。因此, case List<int>:不允许。

关于dart - 在 Dart 中打开类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28084293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com