我想在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 {}
我想要的是有一个对象,然后得到一个相同子类的新对象。
主要问题是fooType
应该是什么类型?我的第一个想法是使用Symbol,这样就可以像case #Bar:
一样轻松地进行分支语句,但我不知道如何用Symbol填充fooType
。我能想到的唯一选项是做像Symbol fooType = new Symbol(foo.runtimeType.toString());
这样的事情,但我了解到当转换成javascript时runtimeType.toString()
无法工作。你可以通过使用Mirrors来解决这个问题,但这是一个轻量级库,所以这些方法不可行。Object.runtimeType
返回Type
类的某些内容,但我不知道如何创建Type
类的实例,以便用于case语句。也许我忽略了某个更适合这种情况的Dart库?
class Foo { Foo _createNew() => new Foo(); Foo getAnother(Foo foo) => foo._createNew(); }
然后class Bar extends Foo { _createNew() => new Bar(); }
,对于Baz
也是如此。 - lrn