Kotlin классы с подчеркиванием - PullRequest
0 голосов
/ 06 сентября 2018

Пожалуйста, объясните мне, каково назначение и значение таких классов, как StringsKt__StringsKt (т.е. двойное имя класса с одним или несколькими символами подчеркивания между ними) и, аналогично, StringsKt__StringsJVMKt?

Строки не единственный пример, есть и много других. Я вижу их, когда просматриваю структуру файла classes.dex в моем .apk.

скриншот здесь

Я спрашиваю, потому что я столкнулся с ситуацией, когда мне пришлось явно указать некоторые из них в моих правилах proguard. Приложение рухнуло без него.

1 Ответ

0 голосов
/ 06 сентября 2018

Это сгенерированный файл. Такой файл будет сгенерирован, если существует несколько файлов Kotlin с одинаковыми именами JvmName.

Давайте возьмем Strings.kt и StringNumberConversions.kt в качестве примера:

// StringNumberConversions.kt
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("StringsKt")
...

// Strings.kt
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("StringsKt")
...

У них обоих есть @file:kotlin.jvm.JvmName("StringsKt"), поэтому для их различения создаются StringsKt и StringsKt__StringNumberConversionsKt.

...