Intereting Posts
База данных SQLite исчезла из эмулятора Android Может ли кто-нибудь здесь подробно описать структуру проекта приложения «Котлин / Родник»? Кроме того, особенности работы различных модулей Миграция номера, попытка повторного открытия уже закрытого объекта: SQLiteDatabase kotlin 1.1.4 примитивы в родовом классе Kotlin: Как я могу вызвать лямбда-поле, которое имеет общий тип его класса? Получение параметров формы на сервер Ktor Преобразование может быть в одиночку из другого источника, если возможно завершено Связывание с JMM классами, определенными asm из Kotlin с использованием Gradle В «Котлине» еще работает «внутренний» модификатор видимости? Как настроить веб-проект с помощью Kotlin в фоновом и в браузере? Gson toJson и ArrayList в Котлине Необычный сбой только на каком-то устройстве – асинхронные вызовы kotlin coroutines Запрос базы данных Firebase real_time не работает API автозаполнения Google Places дает ошибку API_NOT_CONNECTED в конфигурации Instant Apps Фрагмент Котлина

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

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 .

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

Обходным путем является делегирование непосредственно экземпляру 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. Странно, что.