Почему Kotlin слепо превращает внутренние классы в публичные в JVM?

Как вы знаете, частные классы в Kotlin под капотом меняются на частные для пакетов, а внутренние компоненты - на общедоступные. К сожалению, это может привести к известной проблеме здесь.

если компилятор видит использование внутренних классов Kotlin, когда он хочет изменить его на байтовый код, он может выбрать частный пакет для внутренних классов kotlin, которые не использовались вне пакета, и выбрать общедоступный для других, чтобы мы могли обрабатывать выше проблема самостоятельно.

Или они могут определить другую аннотацию, такую ​​как @JvmPackagePrivate, перед внутренними классами, чтобы сообщить компилятору, что мы хотим частный класс пакета в java.

Или они могут сделать и то, и другое.

Вопрос в том, почему они не решают эту очевидную проблему таким очевидным решением?

Есть ли у них другой подход к решению этой проблемы?

Я только что познакомился с Kotlin, поэтому я думаю, что не могу создать lib для java с kotlin, потому что, когда я создаю внутренние конкретные классы, все клиенты могут видеть их за пределами библиотеки, и это серьезная проблема с kotlin. почему они не видят эту очевидную проблему??????

Я хочу упомянуть, что ни один из ответов здесь не решает эту проблему, потому что @JvmSynthetic и @JvmName просто нацелены на развлечения в kotlin, а не на классы, и в конце они оба видны, даже если они изменяют имя классов.

наконец, kotlin утверждает, что он полностью совместим с java, но я думаю, что это неправильно. лучше сказать, что он на 99 процентов совместим с java:)

0 ответов

Другие вопросы по тегам