Просто любопытно: В Котлин я хотел бы получить некоторый 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, я, безусловно, заслуживаю того, чтобы его бросили.