我是新手,我只是想知道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中,我们使用公共(public)方法进行相同的操作。
// 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,cop中使用的普通getter和setter方法不同吗
我们可以简单地使用
class Person {
String _name;
String getName() => _name;
void setName(String val) => _name=val;
}
我知道这就像直接使用变量而不是方法一样,我的简单问题是,使用
get
和set
关键字可以做的简单的getter和setter方法有什么无法实现的吗? 最佳答案
这基本上是为了方便和向后兼容。假设您从一个公共(public) Realm 开始:
class Person {
final String name;
}
但是您随后决定,名称应该是基于姓氏和名字的计算字段:
class Person {
final String lastName;
final String firstName;
String get name => '$firstName $lastName';
}
在Java中,最好的做法是永远不要拥有公共(public)类成员变量,只是因为它无法在不更改API的情况下过渡到方法。因此,即使99%的方法仅以
getVariable()
作为主体,您也必须编写return variable;
acessor方法。