是否可以从构造函数中的父类自动初始化字段?
我收到语法错误:
无法将参数初始值设定项'this.name'与任何字段匹配
class Type {
String name;
}
class Language extends Type {
String id;
Language(this.name) {
答案 0 :(得分:6)
虽然您的情况很常见,但此时dart language spec具体说:
执行初始化形式this.id会导致紧邻的类的字段id被赋予相应实际参数的值。
这实质上告诉我们,构造函数参数中的this.variable
表示法仅适用于直接类中的变量,而不适用于任何父类。有几种解决方案可用:第一种是在构造函数体内分配它:
class Type {
String name;
}
class Language extends Type {
String id;
Language(name) {
this.name = name;
}
}
或者,如果我们可以将父类更改为具有初始化变量的构造函数,那么我们可以使用子类中的初始化列表:
class Type {
String name;
Type();
Type.withName(this.name);
}
class Language extends Type {
String id;
Language(name) : super.withName(name);
}
这假设Type
的默认构造函数没有自动初始化name
,所以我们创建了第二个命名构造函数。