【发布时间】:2020-08-13 08:44:38
【问题描述】:
我是 Flutter 的新手,我只是想知道 getter 和 setter 的特殊关键字。为什么 dart 为 getter 和 setter 分别保留了特殊关键字 get 和 set?有什么特别的原因吗,因为和其他语言一样,它也可以用简单的函数来完成。
dart 中的示例,我们有 get 和 set 关键字。
class Person {
String _name;
String get name => _name;
set name (String val) => _name = val;
}
在 java 中,我们使用公共方法来做同样的事情。
// Java, No get, set keywords used
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
为什么我们在 dart 中需要单独的 get 和 set 关键字?这与我们在 java 中使用的普通 getter 和 setter 方法有什么不同,cop
我们可以简单地使用
class Person {
String _name;
String getName() => _name;
void setName(String val) => _name=val;
}
我知道这有点像直接使用变量而不是方法,我的问题是,有什么我们不能用简单的 getter 和 setter 方法实现的,我们可以使用 get 和 set 关键字来实现吗?
【问题讨论】:
-
你能澄清一下你指的是哪些其他语言,并提供一个例子吗?例如kotlin 也有一个 get/set 关键字。我想不出一种允许用“普通”方法覆盖属性的语言。
-
@herbert java, cpp, python
-
你不能用 java.. 和 python 中的方法重载类成员变量,也可以作为 getattr/setattr 的
@property语法糖 -
get和set用于自定义 getter 和 setter,以防您想要覆盖默认实现,或者拥有没有支持字段的属性。然后,您可以使用具有正常属性语法的自定义 getter 和 setter(例如String get fullName { return "$firstName $lastName"; } ... print(foo.fullName);