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