ОК, я думаю, я понимаю, что вы пытаетесь сделать. Вы хотите, чтобы какой-то побочный эффект происходил, когда значение добавлялось или извлекалось из MutableMap, верно?
Получатель и установщик свойства не имеют к этому никакого отношения. Они являются getter и setter для свойства, ссылкой на MutableMap. Они не являются получателем и установщиком значений в пределах самой карты.
Для этого можно использовать две разные стратегии:
1) Создайте собственную карту класс, который имеет побочные эффекты. Самый простой способ сделать это - создать подкласс существующей реализации MutableMap, такой как HashMap.
open class StringList() {
private val list = mutableListOf<String>()
val values = object: HashMap<String, String>(){
override fun get(key: String): String? {
println("Retrieved map value for key $key") // Side effect here
return super.get(key)
}
override fun put(key: String, value: String): String? {
println("Put key value pair $key / $value") // Side effect here
return super.put(key, value)
}
}
//...
}
2) Напишите свои собственные средства доступа, которые передают вызовы средствам доступа к карте, и добавьте туда свои побочные эффекты. Это заставит вас вызывать эти указанные c функции, а не обращаться к карте напрямую из-за пределов класса, поэтому вы, вероятно, захотите сделать свойство карты protected
или private
.
open class StringList() {
private val list = mutableListOf<String>()
private val values = mutableMapOf<String, String>()
//...
fun putMapValue(key: String, value: String) {
println("Put key value pair $key / $value") // Side effect here
values[key] = value
}
fun getMapValue(key: String): String? {
println("Retrieved map value for key $key") // Side effect here
return values[key]
}
}