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に、コンストラクターの引数の表記法が直接のクラスの変数でのみ機能し、親クラスでは機能しないことを示しています。利用可能な解決策がいくつかあります。1 つ目は、コンストラクターの本体内で割り当てることです。

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代わりに 2 番目の名前付きコンストラクターを作成しました。

于 2012-09-26T13:02:46.630 に答える