访问 kotlin 对象(单例)中的 var 时出现问题

问题描述 投票:0回答:2

拥有这个对象:

object BarManager {
    private var bars = mutableMapOf<String, Bar>()
}

无法像这样访问

bars

BarManager.bars[name]

它给了我这个错误:

无法访问“bars”:它在“BarManager”中是私有的

据说,根据 Kotlin 属性和字段文档,每个可变(即 var)属性都有一个自动为其创建的 getter 和 setter。因此,没有理由为 Kotlin 代码自动生成 getter 和 setter。

那么...这里发生了什么?

android kotlin object singleton var
2个回答
0
投票

您放在属性前面的可见性是那些生成的访问器的可见性,而不是支持字段的可见性。支持字段始终是私有的(并且仅在使用 K2 编译器时可直接在外部访问器中使用;将在 Kotlin 2.0 中正式使用)。

因此,当您放置

private var
时,这意味着 getter 和 setter 都是私有的。删除
private
关键字以使您的 getter 和 setter 公开(默认可见性)。


0
投票

您已将

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
}
© www.soinside.com 2019 - 2024. All rights reserved.