【问题标题】:Override getter functionality in Dart?覆盖 Dart 中的 getter 功能?
【发布时间】:2014-02-04 05:16:30
【问题描述】:

我想在 dart 中声明一个字段,并且只覆盖 getter 的功能,但我不确定如何/如果可能的话。

class Pony {
  String ponyGreeting;
  String ponyName;
  Pony(this.ponyGreeting, this.ponyName);

  String get ponyGreeting => "$ponyGreeting I'm $ponyName!";
}

不过,这会导致错误,因为我已经定义了“ponyGreeting”。我不能只是摆脱 ponyGreeting 字段,因为我想使用构造函数设置它,如果我创建了一个 setter,我将不得不在某个地方设置该值,而且我真的不想要一个多余的属性。

【问题讨论】:

    标签: dart


    【解决方案1】:

    您可以在 getter 旁边使用私有变量:

    class Pony {
      String _ponyGreeting;
      String ponyName;
      Pony(this._ponyGreeting, this.ponyName);
    
      String get ponyGreeting => "$_ponyGreeting I'm $ponyName!";
    }
    

    【讨论】:

    • 是的,但这会用 _ponyGreeting 变量污染 Pony 的库内 API。我想很难改掉旧习惯。 (我是一名 Java 程序员。)
    • @CorayThan:dart 中的约定是“_”前缀变量被认为是“私有/内部”。因此,按照惯例,您不会破坏封装。
    • @CorayThan 如果你想避免这种情况,你可以让 Pony 成为一个单独的库。当使用图书馆隐私而不是班级隐私时,这是一个普遍的问题。你必须决定适当的图书馆部门来实现你想要的隐私级别(有些人采取了 1 个 Dart 文件 = 1 个库的方法)。
    • @Pixel Elephant 1 Dart file = 1 library 是一个有趣的想法,尽管我相信这比这种情况要极端一些。如果 Python 在没有访问修饰符的情况下过得去,Dart 应该只有一个。
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多