【问题标题】:Flutter/Dart: get and set with private variablesFlutter/Dart:使用私有变量获取和设置
【发布时间】:2018-10-15 06:07:41
【问题描述】:

如果我读到 setter 和 getter 必须在 Dart 中显式开发,只有当你想做的不仅仅是检索这些值时。但如果我有私有变量,例如:

Class User {
  User _user;
  String _password;
}

如何访问这些私有变量? 即使我像

这样实现设置密码
 set password(String value) => _password = value;

它当然会给我一个“错误”。

【问题讨论】:

  • 你也应该使用getter。在 android studio 中,您可以简单地通过右键单击代码并采用 generate 方法(alt + insert)来生成这些。

标签: get dart set flutter


【解决方案1】:

如果您想要公共 getter/setter,那么拥有私有变量有什么意义?

只需将其设为公共变量即可。

如果你坚持有一个可以公开访问的私有变量,那么你仍然需要添加 getter 和 setter。

【讨论】:

  • 不用担心。一旦你知道它,很多事情事后看来可能看起来很愚蠢:D
  • 它有一些用途! RenderBoxes 经常使用它来处理markNeedsLayout/markNeedsPaint
  • @RémiRousselet 不确定您的意思。 markNeedsLayoutmarkNeedsPaint 是方法 github.com/flutter/flutter/blob/…, github.com/flutter/flutter/blob/…
  • Renderobjects 具有带有公共 getter/setter 的私有变量,其中 setter 调用这些 markNeedsLayout/Paint
  • 我看不出这与问题有什么关系。当然,如果你想在属性改变时做额外的工作,你需要一个 setter。这是他们存在的主要目的。但是,如果他们所做的只是返回或更新私有属性,则无需使用 getter/setter。而是将属性公开。
【解决方案2】:

由于某些原因,私有变量被导入,如果您有条件地设置或获取您的 Class 属性值,那么 setter 和 getter 对私有变量很重要。示例如下:

   class User {

       int _id;
       String _firstName;
       String _password;

      int get id => _id;

      set id(int value) {
        _id = value;
      }

      String get firstName => _firstName;

      set firstName(String value) {
        if(value.length > 7)
           _firstName = value;
      }

      String get password => _password;

      set password(String value) {
         if(some condition against this value like password)
            _password = value;
      }
   }

注意:您可以在 getter 中设置条件,就像我在上面的示例中给出的 setter 一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2020-06-20
    • 2019-05-17
    • 2020-09-29
    相关资源
    最近更新 更多