改变一个var可能会导致类/程序内部的问题。
我问我,如何在类中正确存储变量,以防止外部或其他类未经授权的访问。
它还应防止封装。
- 使用getter,外部的东西知道类内部的属性。
- 有了backingField,它就更加隐藏在类内部。
正确的方法是什么?
class sleepingRoom {
var beds = 2
get() = field
set(value) {
// do something
}
private var _beds2 = 2
val beds2: Int
get() = _beds2
}
1条答案
按热度按时间wgx48brx1#
多亏了Kotlin中的属性概念,我们不需要担心这个问题。以卧室中的床数为例,如果没有任何进一步的约束,则可以简单地定义一个属性:
这相当于Java代码,其中有一个私有字段以及一个getter和一个setter,但样板代码要少得多。如果你不想有一个setter,那么只需将
var
更改为val
。如果稍后您决定要更改属性
beds
的内部语义,那么没有什么可以阻止您这样做。你可以定义一个显式的getter或setter、另一个支持属性、属性委托者。这可能会极大地改变您的属性的行为,但对于属性的用法,这些都是不可见的。它仍然只是一个属性beds
。