跳到主要内容

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();
}