2

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

我收到语法错误:

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

class Type {
     String name;  
}

class Language extends Type {
     String id;
     Language(this.name) {
4

1 回答 1

7

虽然您的情况很常见,但此时dart 语言规范明确表示:

执行初始化形式 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所以我们创建了第二个命名构造函数。

于 2012-09-26T13:02:46.630 回答