在Dart中,尝试用超类“注册”子类时出现问题

时间:2014-01-20 10:09:37

标签: dart

我希望sub-classes super-class sub-class“以任意名称注册” - 每当我宣布super-class.sub我希望它也进入main()时}地图。

有没有办法在// base class class Mineral{ final String formula; static Map<String,Mineral> sub = {} Mineral( this.formula ); } // sub class - declare and register class Mica extends Mineral{ Mica( String formula ) : super( formula ); } Mineral.sub['mica'] = Mica; // oops! 之外完成此任务?

Error: line 10 pos 1: unexpected token 'Mineral' Mineral.sub['mica'] = Mica;

当我运行时,我得到了

main()

假设super-class之外不允许执行可执行代码。

不能放在sub-classes内,因为其他{{1}}可能会在图书馆外宣布。

2 个答案:

答案 0 :(得分:1)

Dart无法将代码作为正在加载的库的一部分运行。 可执行代码只能放在方法或字段初始化器中,而静态字段初始值设定器是惰性的,因此在您尝试读取它们之前它们不会执行任何代码。

这样做是为了确保快速启动 - 在启动主库的“main”方法之前,Dart程序不必执行任何代码。

所以,不,没有办法在调用main之前初始化一些不常数的东西。

答案 1 :(得分:0)

无论

Mineral.sub['mica'] = new Mica();

static Map<String,Type> sub = {};

分配Mica时,指定类型Micanew Mica()是云母的一个实例,属于矿物类型,可以分配到您声明的地图。

修改

也许你想初始化子地图:

static Map<String,Mineral> sub = {'mica': new Mica()};

提示:问题中此行中缺少分号。