我是新手,我只是想知道getter和setter的特殊关键字。为什么dart分别为getter和setter保留了特殊关键字getset?是否有任何特殊原因,因为像其他语言一样,它也可以通过简单的功能完成。

在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;
}

我知道这就像直接使用变量而不是方法一样,我的简单问题是,使用getset关键字可以做的简单的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方法。

09-27 12:54