Аннотация JvmStatic

Аннотация @JvmStatic применяется к функциям и свойствам внутри объектов object и компаньонов companion object для генерации статических методов в байт-коде JVM. Это позволяет вызывать эти методы из Java-кода как статические методы класса, а не через экземпляр объекта.

Импорт

kotlinimport kotlin.jvm.JvmStatic

Синтаксис

kotlin@JvmStatic
fun methodName(): ReturnType
kotlin@JvmStatic
val propertyName: Type

Пример

Создадим объект с функцией, помеченной аннотацией @JvmStatic:

kotlinobject StringUtils {
  @JvmStatic
  fun capitalize(str: String): String {
    return str.uppercase()
  }
}

В Java такой метод можно вызвать статически:

kotlinString result = StringUtils.capitalize("hello")

Пример

Использование @JvmStatic в компаньон-объекте:

kotlinclass Calculator {
  companion object {
    @JvmStatic
    fun add(a: Int, b: Int): Int {
      return a + b
    }
  }
}

В Java можно вызвать статически:

kotlinint sum = Calculator.add(5, 3)

Пример

Аннотация @JvmStatic для свойства:

kotlinobject Config {
  @JvmStatic
  val version: String = "1.0.0"
}

В Java можно обратиться к свойству статически:

kotlinString version = Config.getVersion()

Пример

Без аннотации @JvmStatic вызов из Java требует обращения через экземпляр:

kotlinobject MathOperations {
  fun multiply(a: Int, b: Int): Int {
    return a * b
  }
}

В Java вызов будет через INSTANCE:

kotlinint result = MathOperations.INSTANCE.multiply(4, 5)

Смотрите также

  • ключевое слово object,
    которое создает объекты-одиночки
  • ключевое слово companion,
    которое создает компаньон-объекты
  • аннотацию @JvmField,
    которая делает поля доступными как публичные поля в Java
  • ключевое слово static,
    которое создает статические члены класса в Java