Dart 强制一个变量只能赋值一次

Dart 强制一个变量只能赋值一次,dart,Dart,假设我在一个类中有以下代码: String _str; String get str => _str; void set(String s) { assert(_str == null); _str = s; } 我如何确保只有setter和getter可以访问_str?这将防止同一类中的任何内容都无法绕过该条件。没有办法。在Dart中,每个图书馆都有隐私权。一个库中的所有内容都可以读/写该库中的所有其他内容 我会选择 String __str; String get s

假设我在一个类中有以下代码:

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

我如何确保只有setter和getter可以访问_str?这将防止同一类中的任何内容都无法绕过该条件。

没有办法。在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);
没有别的办法