跳到主要內容

recursive_constructor_redirect

建構函式不能直接或間接重定向到自身。

描述

#

當建構函式直接或間接重定向到自身,從而建立無限迴圈時,分析器會生成此診斷。

示例

#

以下程式碼會生成此診斷,因為生成建構函式 C.aC.b 相互重定向

dart
class C {
  C.a() : this.b();
  C.b() : this.a();
}

以下程式碼會生成此診斷,因為工廠建構函式 AB 相互重定向

dart
abstract class A {
  factory A() = B;
}
class B implements A {
  factory B() = A;
  B.named();
}

常見修復方法

#

對於生成建構函式,透過確保至少一個建構函式不重定向到另一個建構函式來打破迴圈。

dart
class C {
  C.a() : this.b();
  C.b();
}

對於工廠建構函式,透過確保至少一個工廠建構函式執行以下操作之一來打破迴圈:

  • 重定向到生成建構函式
dart
abstract class A {
  factory A() = B;
}
class B implements A {
  factory B() = B.named;
  B.named();
}
  • 不重定向到其他建構函式
dart
abstract class A {
  factory A() = B;
}
class B implements A {
  factory B() {
    return B.named();
  }

  B.named();
}
  • 不是工廠建構函式
dart
abstract class A {
  factory A() = B;
}
class B implements A {
  B();
  B.named();
}