我希望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}}可能会在图书馆外宣布。
答案 0 :(得分:1)
Dart无法将代码作为正在加载的库的一部分运行。 可执行代码只能放在方法或字段初始化器中,而静态字段初始值设定器是惰性的,因此在您尝试读取它们之前它们不会执行任何代码。
这样做是为了确保快速启动 - 在启动主库的“main”方法之前,Dart程序不必执行任何代码。
所以,不,没有办法在调用main之前初始化一些不常数的东西。
答案 1 :(得分:0)
无论
Mineral.sub['mica'] = new Mica();
或
static Map<String,Type> sub = {};
分配Mica
时,指定类型Mica
。 new Mica()
是云母的一个实例,属于矿物类型,可以分配到您声明的地图。
修改
也许你想初始化子地图:
static Map<String,Mineral> sub = {'mica': new Mica()};
提示:问题中此行中缺少分号。