Dart中如何在构造阶段传递类实例this?
Dart构造时传递
this的解决方案 问题根源
Dart的对象初始化顺序和Java/Kotlin有差异:类的成员变量会在构造函数体执行之前完成初始化,此时对象还未完全创建,this引用不可用,所以直接在成员变量初始化语句中传递this会报错。
两种可行解决方式
1. late final延迟初始化(通用方案)
用late final声明成员变量,在构造函数体中完成赋值——此时this已经完全可用,适用于所有场景:
class A implements B { late final C _c; A() { _c = ConcreteClass(b: this); } }
如果ConcreteClass的构造函数会立即调用B接口的方法,这种方式是最安全的,因为构造函数体执行时,A的对象已经完成全部初始化。
2. 构造函数初始化列表(限引用保存场景)
如果ConcreteClass仅保存b的引用,不会在构造过程中调用其方法,可以直接在初始化列表中赋值:
class A implements B { final C _c; A() : _c = ConcreteClass(b: this); }
注意:如果ConcreteClass在构造时调用了b的成员方法,此时A的对象尚未完成所有成员初始化,可能引发未定义行为,这种情况请优先使用第一种方案。
内容的提问来源于stack exchange,提问作者J_Strauton
相关产品推荐
相关产品推荐

