Просто любопытно: В Котлин я хотел бы получить некоторый val, который можно инициализировать ленивым, но с параметром. Это потому, что мне нужно что-то, что создано очень поздно, чтобы инициализировать его.
В частности, я бы хотел:
private lateinit val controlObj:SomeView
или же:
private val controlObj:SomeView by lazy { view:View->view.findViewById(...)}
а потом:
override fun onCreateView(....) {
val view = inflate(....)
controlObj = view.findViewById(...)
или во втором случае controlObj.initWith(view)
или что-то вроде этого:
return view
Я не могу использовать by lazy
потому что by lazy
не будет принимать внешние параметры, которые будут использоваться при инициализации. В этом примере - содержащий view
.
Конечно, у меня есть lateinit var
но было бы неплохо, если бы я мог убедиться, что он будет прочитан только после настройки, и я мог бы сделать это в одной строке.
Есть ли довольно чистый способ создания переменной только для чтения, которая инициализируется только один раз, но только когда рождаются некоторые другие переменные? Любое ключевое слово init once
? Что после init компилятор знает, что он неизменен?
Я знаю о возможных проблемах параллелизма здесь, но если я осмелюсь обратиться к нему перед init, я, безусловно, заслуживаю того, чтобы его бросили.