Можно ли у Delegated property вызвать после by конструктор класса в Kotlin

«Можно ли у Delegated property вызвать после by конструктор класса в Kotlin» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, делегированное свойство (by) не может вызывать конструктор класса напрямую. Делегат должен быть экземпляром класса, а не самим классом. Однако можно передать аргументы конструктора при создании делегата:

class ExampleDelegate(private val initValue: String) {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String = initValue
}

class MyClass {
    val myProperty by ExampleDelegate("Initial Value") // Здесь вызывается конструктор делегата
}

Коротко: после by должен стоять готовый экземпляр, но можно создать его "на лету" с нужными параметрами конструктора.