Я хочу, чтобы определить свою собственную аксессор для поля, как это:Можем ли мы определить наши аксессоры без значения init?
var item: Item
get() {...}
set(value) {...}
Я получаю сообщение об ошибке, потому что элемент не инициализирован. Я не могу добавить lateinit, потому что я определяю методы get и set.
Что я могу выбрать, так это объявить другое поле с нулевым значением и использовать это поле для реализации элементов доступа к элементам, что является слишком глупым и избыточным.
Так что я думаю, там должны и другие способы реализации этого требования ...
обновление:
Спасибо вам за ответ. Я думаю, что я не выразил это ясно. И после того, как я прочитал документ несколько раз, я думаю, что ответ НЕТ.
Мое требование: есть ли более простой альтернативный способ объявить об этом?
private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
get() {
if (_table == null)
_table = HashMap() // Type parameters are inferred
return _table ?: throw AssertionError("Set to null by another thread")
}
Мы должны объявить свойство nullabe подкладочного поэтому мы можем настроить аксессор, а также оставить поле неинициализированным.