【问题标题】:How can I add a getter to a Dart class with a named parameter on its constructor?如何在 Dart 类的构造函数中使用命名参数添加 getter?
【发布时间】:2018-04-01 22:19:29
【问题描述】:

假设我有以下 Dart 类,其构造函数中有一个命名参数:

class TestClass {
  final int someValue;
  TestClass({this.someValue});
}

void someMethod() {
  TestClass testClass = new TestClass(someValue: 10);
  print(testClass.someValue);
}

如何为该字段添加吸气剂?我正在尝试以下方式:

class TestClass {
  final int _someValue;
  TestClass({this.someValue});
  int get someValue => _someValue+2;
}

【问题讨论】:

  • 从技术上讲,您已经有了该领域的吸气剂。我猜你想保持字段非最终状态,只为它公开一个 getter(这是你通常使用 private-field/public-getter 模式的地方),并且还想要一个命名的构造函数参数来初始化字段。

标签: dart getter named-parameters


【解决方案1】:

命名参数不能是私有的,但您可以使用命名参数、私有成员和初始化程序获得所需的结果。你可以在没有初始化器的构造器主体中做同样的事情,但是_someValue 不能是最终的。

class TestClass {
  final int _someValue;

  TestClass({int someValue}) : _someValue = someValue;

  int get someValue => _someValue;
}

但是,在 Dart 中这样做几乎没有价值。没有相应 setter 的 getter 在语义上等价于 final 字段。

【讨论】:

    【解决方案2】:

    TestClass({this.someValue});

    没有同名的成员变量。你是说_someValue吗?

    【讨论】:

    • 我没有任何意思。 “我正在尝试类似的东西”只是不起作用的随机代码。 TestClass({this._someValue}) 也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2019-10-31
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多