Dart const构造函数不生效 实例id输出为0问题排查
问题根因
构造函数的入参根本没有绑定到类的实例属性上:
- 你在类里直接给
id写死了初始值0、name写死了初始值空字符串,这两个值是固定的,和构造函数接收的参数没有任何关系 - 构造函数括号里定义的
id、name只是函数内部的局部变量,传进来的值根本没同步到实例属性上,所以不管你创建实例时传什么参数,读出来的id永远是硬编码的0。
修复方案
先把属性上写死的初始值删掉,把构造参数和实例属性做绑定即可。const构造函数有两种合规写法:
- 最简洁的写法是用
this.语法糖,自动把同名入参绑定到实例属性,日常开发优先用这种:
class User { final int id; final String name; const User({this.id = 0, this.name = "anonymous"}); }
- 如果要加参数校验,或者入参名和属性名不一致,可以用初始化列表显式赋值:
class User { final int id; final String name; const User({int id = 0, String name = "anonymous"}) : assert(id >= 0, 'id不能为负'), id = id, name = name; }
改完之后再运行,print(vicki.id)就会正确输出传入的24。
注意:const构造函数不允许在函数体内给属性赋值——因为const实例是编译期常量,所有属性必须在构造阶段就完成初始化,只能通过初始化列表或者
this.语法糖赋值。
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

