Проблема в том, что Map
не является свойством, вы не можете использовать делегаты свойств таким способом.Вам нужно написать декоратор для Map
следующим образом:
class ObservableMap<K, V>(private val map: MutableMap<K, V>) : MutableMap<K, V> by map {
override fun put(key: K, value: V): V? {
TODO("not implemented")
}
override fun putAll(from: Map<out K, V>) {
TODO("not implemented")
}
override fun remove(key: K): V? {
TODO("not implemented")
}
}
Здесь мы делегируем все операции поддержке map
, и вам нужно только реализовать свою логику при добавлении / удалениив описанных выше методах.
Я не уверен, что вы подразумеваете под update
, но если вы имеете в виду «значение на карте перезаписывается», то вы можете справиться с этим в put
.
Вы можете использовать это ObservableMap
следующим образом:
val map = ObservableMap(ConcurrentHashMap<String, String>())
Обратите внимание, что если вы хотите поддерживать операции ConcurrentHashMap
, вам также необходимо включить overrides
для AbstractMap<K,V>
и ConcurrentMap<K,V>
так как они добавляют некоторые новые операции, которые вы можете отслеживать.Приведенный выше код является лишь примером.