Ошибка «Переменная должна быть инициализирована» при делегировании инициализированному свойству

object Foo : CharSequence by Foo.X { val X = "" } 

производит

 Variable 'X' must be initialized 

Но это! И код должен перевести на что-то вроде

 object Foo : CharSequence { val X = "" override val length get() = Foo.X.length override operator fun get(index: Int): Char = Foo.X[index] override fun subSequence(startIndex: Int, endIndex: Int) = Foo.X.subSequence(startIndex, endIndex) } 

который работает хорошо.

В чем причина ошибки и есть ли обходной путь? В реальной инициализации кода нетривиально, и Foo должен быть object (фактически, сопутствующим объектом), а не class .

Solutions Collecting From Web of "Ошибка «Переменная должна быть инициализирована» при делегировании инициализированному свойству"

Я предполагаю, что использование делегирования класса на объекте несколько неочевидно, так что, вероятно, суть причины .

Обходным путем является делегирование непосредственно экземпляру String. Этот код работает для меня:

 fun main(args: Array<String>) { println("Hello, world! ${Bar.Foo.indexOf("z")}") // Prints "2" } class Bar { companion object Foo : CharSequence by String(StringBuilder("xyzzy")) { } } 

Кроме того, String в Kotlin не имеет конструктора, который принимает параметр String. Странно, что.