Kotlin предоставляет несколько аннотаций для улучшения совместимости с Java, контролируя компиляцию кода Kotlin в байткод JVM.
@JvmStaticПо умолчанию функции, определённые в companion object или object, не являются настоящими статическими методами — для обращения к ним сначала требуется экземпляр companion. Применение @JvmStatic генерирует настоящий статический метод в байткоде, позволяя вызывать его из Java естественным образом:
// Kotlin
companion object {
@JvmStatic fun create(): MyClass = MyClass()
}
// Java
MyClass.create(); // вместо MyClass.Companion.create()
@JvmFieldKotlin-свойства автоматически генерируют геттеры и сеттеры в байткоде. Применение @JvmField открывает свойство как обычное публичное поле Java, убирая методы доступа:
// Kotlin
@JvmField val MAX_SIZE = 100
// Java
obj.MAX_SIZE; // вместо obj.getMAX_SIZE()
Это особенно полезно для констант и интеграции с фреймворками, которые ожидают прямого доступа к полям.
@JvmOverloadsKotlin поддерживает параметры со значениями по умолчанию, но Java — нет. Без этой аннотации Java-код вынужден всегда передавать все аргументы. Применение @JvmOverloads указывает компилятору генерировать несколько перегруженных методов — по одному для каждого параметра со значением по умолчанию:
// Kotlin
@JvmOverloads fun greet(name: String, greeting: String = "Hello") { }
// Java — оба вызова допустимы
greet("Alice");
greet("Alice", "Hi");
@JvmStatic для открытия функций companion/object как настоящих статических методов@JvmField для отключения генерации геттеров/сеттеров и прямого доступа к полям@JvmOverloads для поддержки параметров по умолчанию из Java-кодаАннотация @JvmStatic преобразует функции companion object в настоящие статические методы в bytecode JVM, позволяя Java-коду вызывать их прямо на классе без обращения к экземпляру Companion.
Новый — ещё не проверен сообществом
Вы