Делегирование класса
Я хочу иметь класс-обёртку, которая делегирует все свои public члены указанному объекту из этого класса. Для этого я использую ключевое слово by. Но этот код имеет несколько минусов:
- объект data приходится делать изменяемым, хотя он устанавливается всего один раз при инициализации.
- data не должен устанавливаться пользователем, но при этом его обязательно надо указать в первичном конструкторе.
class Cache(
private val file: File,
private var data: MutableMap<String, String> = mutableMapOf()
) : MutableMap<String, String> by data {
init {
data = Json.decodeFromStream(file.inputStream())
}
fun save() {
Json.encodeToStream(data, file.outputStream())
}
}
Какой самый логичный выход из этой ситуации?
Требуется, чтобы класс Cache обязательно реализовывал интерфейс MutableMap<String, String>.
Источник: Stack Overflow на русском