> Есть ли аннотации для улучшения интеропа Kotlin и Java, например JVMStatic (Kotlin, Java, Android)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Яндекс

Стек: Kotlin, Java, Android

> Пример ответа

Да, в Kotlin есть несколько аннотаций для улучшения интероперабельности с Java. Основные из них:

  • @JvmStatic - применяется к методам и полям в объектах-компаньонах или именованных объектах, чтобы они компилировались как статические члены Java. Без неё метод будет доступен через Companion.method().
  • @JvmField - делает свойство Kotlin доступным как поле Java (без геттеров/сеттеров). Полезно для констант или полей, которые должны напрямую использоваться в Java-коде.
  • @JvmOverloads - генерирует перегрузки функций с параметрами по умолчанию. Без неё Java-вызов требует указания всех аргументов.
  • @Throws - указывает, что функция может выбрасывать проверяемое исключение (checked exception), что необходимо для Java-совместимости.
  • @JvmName - задаёт другое имя для функции или свойства при компиляции в байт-код, чтобы избежать конфликтов имён (например, при перегрузке с разными типами).
  • @JvmMultifileClass - позволяет объединять функции из нескольких файлов в один класс для Java.

Пример использования:

class Utils {
    companion object {
        @JvmStatic
        fun create(): Utils = Utils()
        
        @JvmField
        val TAG = "Utils"
        
        @JvmOverloads
        fun greet(name: String = "World"): String = "Hello, $name"
    }
}

В Java это будет выглядеть как Utils.create(), Utils.TAG, Utils.greet("User").

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью