我想在Dart超类中编写一个函数,根据实际使用它的子类采取不同的操作.比如:
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 {}
这里的 idea 是,我有一些对象,并希望得到一个相同(子)类的新对象.
主要问题是fooType
应该是什么类型?我的第一个 idea 是符号,这会导致简单的case语句,比如case #Bar:
,但是我不知道如何用符号填充fooType
.我能想到的唯一 Select 是做类似Symbol fooType = new Symbol(foo.runtimeType.toString());
的事情,但我的理解是runtimeType.toString()
在转换成javascript时不能工作.您可以通过使用Mirrors来解决这个问题,但是这是一个轻量级的库,所以它们不在桌面上.Object.runtimeType
返回Type
类的一些内容,但是我不知道如何创建可以用于case语句的Type
实例.也许我错过了DART库中更适合这个的其他部分?