Dart和Flutter中的Getter和Setter。
与许多其他语言一样,getters \ setters方法提供对对象属性的读/写访问权限。
在本文中,我们将看一些简单的示例,然后在dartpad中运行它们。

在Dart中,使用getters \ setters实现对象的任何属性的读写。
例如看代码
class Person { String name; int birthYear; Person(this.name, this.birthYear); } void main() { Person person = Person('username', 1990); print('Hello ${person.name}, you was born in ${person.birthYear}'); person.name = 'Newusername'; print('Hello ${person.name}, you was born in ${person.birthYear}'); }
在Dartpad中运行代码。
此类中的每个属性都有一个隐式的setter来写入它,还有一个隐式的getter来获取值。
当我们调用person.name = 'Newusername';
然后我们来看二传手课程。 之后,我们使用getter获得其值person.name
。
在Dart中,我们可以(建议这样做是为了进行代码抽象)创建自己的getter和setter。 这使我们可以使用属性初始化类,并在将来使用不同的方法包装它们,而无需更改客户端代码。
例如,假设我们的Person类项目已经发展,我们需要确定成年年龄。 我们可以做到这一点而无需更改对象的构造函数和基本属性。
class Person { String name; int birthYear; bool get isAdult => (DateTime.now().year - birthYear) > 18; Person(this.name, this.birthYear); } void main() { Person personAdult = Person('adultUser', 1990); print('Hello ${personAdult.name}, you was born in ${personAdult.birthYear}, you are ${personAdult.isAdult ? 'adult' : 'not adult'}'); Person personNotAdult = Person('adultUser', 2005); print('Hello ${personNotAdult.name}, you was born in ${personNotAdult.birthYear}, you are ${personNotAdult.isAdult ? 'adult' : 'not adult'}'); }
在Dartpad中运行代码。
在Dartpad中运行代码,我们看到我们添加了一个新的类行为,而已经创建的客户端代码将不受影响,并且一切将继续进行。
同样,如果在项目的某些部分中,我们开始使用年龄而不是出生日期,那么可以在指定年龄时添加设置器来记录生日。
class Person { String name; int birthYear; bool get isAdult => (DateTime.now().year - birthYear) > 18; int get age => (DateTime.now().year - birthYear); set age(int val) => birthYear = (DateTime.now().year - val); Person(this.name, this.birthYear); } void main() { Person personAdult = Person('adultUser', 1990); print('Hello ${personAdult.name}, you was born in ${personAdult.birthYear}, you are ${personAdult.isAdult ? 'adult' : 'not adult'}'); Person personNotAdult = Person('adultUser', 2005); print('Hello ${personNotAdult.name}, you was born in ${personNotAdult.birthYear}, you are ${personNotAdult.isAdult ? 'adult' : 'not adult'}'); //check how setter work print(personAdult.birthYear); personAdult.age = 5; print(personAdult.birthYear); }
在Dartpad中运行代码。
通常,由于经常使用getter和setter,因此它们的自动创建功能已内置到Android Studio中。 当按下属性上的光标时,按Command + N(在Windows中为Ctrl + N),它们的创建将在快捷菜单中。
好的编码给大家!