如何用单参数构造函数填充多属性?Dart类初始化报错问题
Dart类实例变量未初始化问题解决办法
你的代码报错是因为Dart要求非空实例变量必须在构造函数执行体运行前完成初始化,而你在构造函数体内部赋值的方式,编译器无法保证变量一定会被初始化,所以触发了未初始化提示。以下是几种可行的解决方式:
方案1:使用构造函数初始化列表(推荐)
这是Dart初始化实例变量的标准做法,直接在构造函数参数后通过冒号初始化变量:
class Two { int propA = 1; int propB = 2; int propC = 3; } class One { int prop1; int prop2; One(Two two) : prop1 = two.propA + two.propB, prop2 = two.propC + 3; }
方案2:使用late修饰符
通过late告诉编译器,变量会在构造函数体内部被初始化,不会为null:
class Two { int propA = 1; int propB = 2; int propC = 3; } class One { late int prop1; late int prop2; One(Two two){ prop1 = two.propA + two.propB; prop2 = two.propC + 3; } }
方案3:声明为可空类型(不推荐)
如果允许变量为null,可以给变量加上?标记为可空类型,但这不符合你需要计算赋值的场景:
class Two { int propA = 1; int propB = 2; int propC = 3; } class One { int? prop1; int? prop2; One(Two two){ prop1 = two.propA + two.propB; prop2 = two.propC + 3; } }
推荐使用方案1,初始化列表能确保变量在构造函数执行体运行前完成初始化,避免late可能带来的运行时错误风险。
内容的提问来源于stack exchange,提问作者ViniciusCR
相关产品推荐
相关产品推荐

