我们说我在一个类中有这个代码:
String _str;
String get str => _str;
void set(String s) {
assert(_str == null);
_str = s;
}
我怎样才能确保只有setter和getter才能访问_str?这将是为了防止同一类中的任何内容无法绕过该条件。
答案 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);
并且别无其他。