【发布时间】:2020-04-09 20:07:10
【问题描述】:
在一个类中,我有一个 MutableMap,我想声明一个 getter 和一个 setter,如下所示:
open class StringList() {
private val list= mutableListOf<String>()
var values: MutableMap<String, String>
get() {
println("get member") // this is printed.. twice
return mutableMapOf<String, String>()
}
set(value) {
println("set member") // this is not printed
}
fun add(s: String, aObject: Any? = null): Int {
list.add(s)
return list.count() - 1
}
}
但是当我运行代码时,像这样:
var sl = StringList()
sl.add("user=amo")
sl.values["user"] = "other"
val r = sl.values["user"]
我意识到 getter 执行了两次,而 setter 则没有执行。
我做错了什么?
【问题讨论】:
-
也许我理解错了,但你从来没有调用过setter,你调用了两次getter。调用 setter 将是 s1.values = mutableMapOf 等,但您将 s1.values 引用两次作为 getter,第一次然后设置一个条目位而不设置地图
标签: kotlin operator-overloading