拥有这个对象:
object BarManager {
private var bars = mutableMapOf<String, Bar>()
}
无法像这样访问
bars
:
BarManager.bars[name]
它给了我这个错误:
无法访问“bars”:它在“BarManager”中是私有的
据说,根据 Kotlin 属性和字段文档,每个可变(即 var)属性都有一个自动为其创建的 getter 和 setter。因此,没有理由为 Kotlin 代码自动生成 getter 和 setter。
那么...这里发生了什么?
您放在属性前面的可见性是那些生成的访问器的可见性,而不是支持字段的可见性。支持字段始终是私有的(并且仅在使用 K2 编译器时可直接在外部访问器中使用;将在 Kotlin 2.0 中正式使用)。
因此,当您放置
private var
时,这意味着 getter 和 setter 都是私有的。删除 private
关键字以使您的 getter 和 setter 公开(默认可见性)。
您已将
bars
的可见性设置为私有,因此无法在 BarManager 对象外部访问它。
只需删除
private
修饰符即可。
object BarManager {
var bars = mutableMapOf<String, Bar>()
}
您也可以将该属性声明为
val
,因为它似乎不需要可变性。
object BarManager {
val bars = mutableMapOf<String, Bar>()
}
如果由于某种原因它需要成为 BarManager 内的可变引用,但您不希望从 BarManager 外部更改该引用,您可以这样做
object BarManager {
val bars = mutableMapOf<String, Bar>()
private set
}