强制只能为变量分配一次

时间:2015-11-19 11:06:17

标签: dart

我们说我在一个类中有这个代码:

String _str;
String get str => _str;
void set(String s) {
    assert(_str == null);
    _str = s;
}

我怎样才能确保只有setter和getter才能访问_str?这将是为了防止同一类中的任何内容无法绕过该条件。

1 个答案:

答案 0 :(得分:2)

没有办法。在Dart隐私是每个库。一个库中的所有内容都可以读取/写入该库中的所有其他内容。

我会去

String __str;
String get str => __str;
void set(String s) {
    assert(__str == null);
    __str = s;
}

并且永远不会访问以两个下划线开头的成员,除非在相关的getter / setter对中。 有时当我想要一个私有的getter setter(如

)的私有字段时,我会这样做
String __str;
String get _str => __str;
void _set(String s) {
    assert(_str == null);
    __str = s;
}

一个奇怪的解决方法是在另一个库中创建一个类,如

class StringProperty {
  String _str;
  String get value => _str;
  void set value(String s) {
    assert(_str == null);
    _str = s;
  }
}

然后在您的库中使用它,如

final StringProperty str = new StringProperty();

然后您可以访问该值,如

str.value = 'abc';
print(str.value);

并且别无其他。

相关问题