メインコンテンツにスキップ

フィールド_イニシャライザ_リダイレクト_コンストラクタ

リダイレクトコンストラクタはフィールドイニシャライザを持つことはできません。

説明

#

リダイレクトコンストラクタがオブジェクトのフィールドを初期化する場合、アナライザはこの診断を生成します。これは、フィールドを持つインスタンスが初期化されるべき時点でまだ作成されていないため、許可されていません。

#

以下のコードは、コンストラクタ C にリダイレクトされるコンストラクタ C.zero が、フィールド f を初期化する初期化フォーマルパラメータを持っているため、この診断を生成します。

dart
class C {
  int f;

  C(this.f);

  C.zero(this.f) : this(f);
}

以下のコードは、コンストラクタ C にリダイレクトされるコンストラクタ C.zero が、フィールド f を初期化するイニシャライザを持っているため、この診断を生成します。

dart
class C {
  int f;

  C(this.f);

  C.zero() : f = 0, this(1);
}

一般的な修正

#

初期化が初期化フォーマルパラメータによって行われる場合は、通常のパラメータを使用してください。

dart
class C {
  int f;

  C(this.f);

  C.zero(int f) : this(f);
}

初期化がイニシャライザで行われる場合は、イニシャライザを削除してください。

dart
class C {
  int f;

  C(this.f);

  C.zero() : this(0);
}