【发布时间】:2015-03-20 23:31:42
【问题描述】:
我希望在 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 应该是什么类型?我的第一个想法是符号,它会导致像case #Bar: 这样的简单案例语句,但我不知道如何用符号填充fooType。我能想到的唯一选择是做类似Symbol fooType = new Symbol(foo.runtimeType.toString()); 的事情,但我的理解是runtimeType.toString() 在转换为javascript 时将不起作用。你可以通过使用 Mirrors 来解决这个问题,但这意味着它是一个轻量级的库,所以这些不在桌面上。 Object.runtimeType 返回 Type 类的某些内容,但我不知道如何创建可用于 case 语句的 Type 实例。也许我错过了更适合此的 Dart 库的其他部分?
【问题讨论】:
-
子类的特殊行为,取决于类:这听起来与虚函数旨在解决的问题完全一样。如何拥有:
class Foo { Foo _createNew() => new Foo(); Foo getAnother(Foo foo) => foo._createNew(); },然后是class Bar extends Foo { _createNew() => new Bar(); }和类似的Baz?
标签: dart