Kotlin и Java достигают бесшовной совместимости в первую очередь потому, что оба компилируются в один и тот же JVM-байткод. Это значит, что они могут сосуществовать в одном проекте, делить один classpath и вызывать код друг друга без каких-либо обёрток или мостов.
Kotlin может обращаться к Java-коду напрямую и естественно:
getName() становится .name)Kotlin предоставляет специальные JVM-аннотации для того, чтобы сгенерированный байткод был удобен для Java:
@JvmStatic — экспортирует функции companion object как статические методы@JvmField — экспортирует Kotlin-свойство как Java-поле, минуя генерацию геттеров/сеттеров@JvmOverloads — генерирует несколько перегрузок метода для функций с параметрами по умолчанию, делая их доступными из Javasrc/
├── main/java/ ← Java исходные файлы
└── main/kotlin/ ← Kotlin исходные файлы
Оба каталога компилируются вместе в стандартной сборке Gradle или Maven. Kotlin и Java файлы могут напрямую ссылаться друг на друга в пределах одного модуля без какой-либо дополнительной конфигурации.
Сочетание общего JVM-байткода, автоматического преобразования свойств и точечных JVM-аннотаций делает Kotlin и Java полностью совместимыми. Это позволяет командам постепенно мигрировать существующие Java-кодовые базы на Kotlin, не ломая текущую функциональность.
Kotlin и Java достигают взаимодействия, потому что оба компилируются в одинаковый JVM bytecode, что позволяет получать прямой доступ к коду без обёрток или мостов.
Новый — ещё не проверен сообществом
Вы