recursive_constructor_redirect
建構函式不能直接或間接重定向到自身。
描述
#當建構函式直接或間接重定向到自身,從而建立無限迴圈時,分析器會生成此診斷。
示例
#以下程式碼會生成此診斷,因為生成建構函式 C.a 和 C.b 相互重定向
dart
class C {
C.a() : this.b();
C.b() : this.a();
}以下程式碼會生成此診斷,因為工廠建構函式 A 和 B 相互重定向
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();
}