Открытые поля для совместимости с Java

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

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

Таким образом, байт-код, сгенерированный из файла Kotlin, фактически создает общедоступные методы получения и установки, а сами поля все еще остаются закрытыми.

Есть ли способ преодолеть это, чтобы я получил реальные публичные поля?

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

1 ответ

Решение

Аннотация @JvmField должен помочь тебе. Это заставляет Kotlin-компилятор выставлять свойство как поле в JVM. Смотрите здесь: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-field/

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