flutter - 在 Dart 中使用带有构造函数的 Setter
问题描述
如何在 Dart 的默认构造函数中使用私有实例变量的设置器?
给定示例类:
class A {
String name;
int _age;
int get age => _age;
set age(age) {
_age = age ?? 0;
}
A(this.name, this._age);
}
如何使用此构造函数来执行该set age()
函数?除了使用 a 之外还有factory
吗?我想做这样的事情
A(this.name, newAge): age = newAge;
但是我得到一个错误,迫使我只从构造函数中设置实例变量,这让我只是复制了 setter:
A(this.name, newAge): _age = newAge ?? 0;
我是否遗漏了什么,或者这对飞镖来说是不可能的?
解决方案
构造函数的初始化列表只能用于初始化成员(或调用基类构造函数)。(另外,初始化列表执行时,this
还没有生效,所以不能访问任何成员。)
如果你想做其他类型的初始化工作,你可以在构造函数体中做,此时对象被认为是充分构造的this
有效的:
A(this.name, int newAge) {
age = newAge;
}
另见:
- 在参数列表和初始化列表中分配值之间的区别,这解释了为什么这仅对对象初始化的后期阶段有效。
- https://stackoverflow.com/a/64548861/了解初始化成员的不同方式之间的各种差异,以及不同方式很重要的示例。
推荐阅读
- java - 从保管箱下载整个(84M)文件后,它变成0字节
- python - Django + (django-model-utils):结合两个模型/从两个模型继承
- performance - 从频率值计算风速
- python - 使用 peewee 如何连接到现有的 SQLite 数据库以进行只读
- c# - ListView 内的 Xamarin 表单用户控件绑定
- typo3 - 如何在 TYPO3 中上传 PDF 文件并通过电子邮件发送?
- json - Angular 5 Observable 映射到 Json 数组
- ubuntu - 在 docker build 的一个步骤中在容器中运行后台进程
- r - 参数名称函数 R
- python - 使用flask.app.test_client()测试Flask应用程序时如何在python Flask中指定标头?