Вы фактически должны инициализировать переменную во время создания объекта в самом объявлении переменной или в блоке init{}
, так как в Kotlin.
нет предопределенного нулевого типа. ваша переменная val
не var
вы не можете установить ее после создания, поэтому нет смысла создавать переменную.
Если вы хотели инициализировать переменную позже, но только один раз, проверьте этот ответ: { ссылка } Это делается делегированием следующим образом:
class InitOnceProperty<T> : ReadWriteProperty<Any, T> {
private object EMPTY
private var value: Any? = EMPTY
override fun getValue(thisRef: Any, property: KProperty<*>): T {
if (value == EMPTY) {
throw IllegalStateException("Value isn't initialized")
} else {
return value as T
}
}
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
if (this.value != EMPTY) {
throw IllegalStateException("Value is initialized")
}
this.value = value
}
}
Теперь вы можете делегировать переменную делегату
var property: Int by InitOnceProperty()