Kotlin определяет свой собственный класс String:
public class String : Comparable<String>, CharSequence {
companion object {}
public operator fun plus(other: Any?): String
public override val length: Int
public override fun get(index: Int): Char
public override fun subSequence(startIndex: Int, endIndex: Int): CharSequence
public override fun compareTo(other: String): Int
}
Экземпляры этого класса создаются с помощью встроенных функций, определенных в StringsJVM.kt:
public inline fun String(bytes: ByteArray, offset: Int, length: Int): String =
java.lang.String(bytes, offset, length, Charsets.UTF_8) as String
Вопросов:
java.lang.String в kotlin.String? Это не подтип, а отдельная реализация CharSequence.length - это значение, которому не присвоено значение. Как это компилируется? Это должен быть lateinit varЯ предполагаю, что перед компиляцией должна выполняться какая-то предварительная обработка кода.
Не стесняйтесь редактировать этот вопрос с более подходящим заголовком.





По сути, kotlin.String - это сопоставленный тип, что означает, что при компиляции в байт-код JVM все использования Kotlin типа kotlin.String транслируются в эквивалентные использования java.lang.String.
Этот метод обеспечивает совместимость типов Kotlin и Java и в то же время позволяет добавлять Kotlin-idiomatic API к типам Java.
Вы можете проверьте файлы *.class, созданный компилятором, и увидеть, что они упоминают java.lang.String.
См. Также: одинаковые вопросы и ответы.
Что касается компиляции свойства length определения kotlin.String, вы можете видеть, что на самом деле оно никогда не компилируется, а только сериализуется во встроенные метаданные Kotlin, согласно скрипт сборки Gradle соответствующего модуля.