如何自动初始化父字段?

Tod*_*ery 1 dart

是否可以从构造函数中的父类自动初始化字段?

我得到语法错误:

无法将参数初始值设定项'this.name'与任何字段匹配

class Type {
     String name;  
}

class Language extends Type {
     String id;
     Language(this.name) {
Run Code Online (Sandbox Code Playgroud)

Mat*_*t B 6

虽然你的情况很常见,但此时dart语言规范明确指出:

执行初始化形式this.id会导致紧邻的类的字段id被赋予相应实际参数的值.

这基本上告诉我们,this.variable构造函数参数中的表示法仅适用于直接类中的变量,而不适用于任何父类.有几种解决方案可用:第一种是在构造函数体内分配它:

class Type {
  String name;
}

class Language extends Type {
  String id;
  Language(name) {
    this.name = name;
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果我们可以将父类更改为具有初始化变量的构造函数,那么我们可以使用子类中的初始化列表:

class Type {
  String name;
  Type();
  Type.withName(this.name);
}

class Language extends Type {
  String id;
  Language(name) : super.withName(name);
}
Run Code Online (Sandbox Code Playgroud)

这假设有一些原因,默认构造函数Type不会自动初始化,name所以我们创建了第二个命名构造函数.