为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我按视频中的方法,自定义多个构造方法,却出错呢?Dart版本问题?

https://img2.sycdn.imooc.com/5ced377f000116db08390889.jpg


通过试验,发现只要对象中定义了final属性,在定义多个命名对象的时候,每次都必须要对final属性进行定义,否则会出错。

https://img1.sycdn.imooc.com/5ced38610001069508520776.jpg


以下是我改进过的,完全正确。

https://img1.sycdn.imooc.com//5ced3b9b0001aeb606150784.jpg

可是我百思不得其解的是,老师在视频中的,为啥能够正常运行呢?

可是我百思不得其解的是,老师在视频中的,为啥能够正常运行呢?

https://img1.sycdn.imooc.com//5ced38fa0001737c14590912.jpg

正在回答

2 回答

https://img1.sycdn.imooc.com/65a749b000014e1510721756.jpg

目前新版本还需要处理变量的非空定义。

0 回复 有任何疑惑可以回复我~

很高兴回答您的问题  经过github查找 确实是版本问题  在2.3版本中 添加了对 含有 final关键字 属性的初始化校验 意思就是  如果类中的属性 被标记为 final 那这个属性必须初始化值 不然无法编译通过 我是基于这个地址 https://github.com/dart-lang/sdk/commit/f8a96b88e9d52ac5cbbdc639d326e7a4baba3842 和以往编程语言对final 的定义 推断出来的   这也就解释了你之前的实验 关键一点就是 含有final 属性的字段 必须在 构造之前初始化  目前我已知的有两种方式 一 是 属性声明时初始化 如 final String workType = "XXX" ;   这样 你在定义其他构造函数时 就无需添加 this.workType 了 另一种就是哥们你最后写的那样 使用语法糖 在构造函数中 写his.workType  这俩都是在调用构造函数之前 对 workType进行初始化 不知是否解决您的疑问哈

4 回复 有任何疑惑可以回复我~
#1

weixin_宝慕林1158390

正解,如果声明时没有对final初始化,再所有的构造方法中的语法糖都得对此属性赋值
2021-09-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么我按视频中的方法,自定义多个构造方法,却出错呢?Dart版本问题?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信