НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1291 of 1310 menu

jvmstatic

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

Синтаксис

@JvmStatic fun methodName(parameters): ReturnType { // method body }

Пример

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

object StringUtils { @JvmStatic fun reverseString(input: String): String { return input.reversed() } fun capitalizeString(input: String): String { return input.capitalize() } }

Метод reverseString будет доступен как статический из Java, а метод capitalizeString - только как метод экземпляра объекта.

Пример

Использование @JvmStatic в companion object:

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

Пример

Вызов методов из Kotlin кода:

val result1 = StringUtils.reverseString("hello") val result2 = Calculator.add(5, 3) println(result1) println(result2)

Результат выполнения кода:

String "olleh" Int 8

Пример

Как эти методы будут выглядеть для Java кода:

// Вызов статического метода String reversed = StringUtils.reverseString("hello"); int sum = Calculator.add(5, 3); // Вызов нестатического метода String capitalized = StringUtils.INSTANCE.capitalizeString("hello"); int difference = Calculator.Companion.subtract(5, 3);

Пример

Использование @JvmStatic для свойств:

object AppConfig { @JvmStatic val VERSION = "1.0.0" @JvmStatic var DEBUG_MODE = false }

В Java эти свойства будут доступны через статические геттеры и сеттеры.

Примечания

Аннотация @JvmStatic не делает метод статическим в Kotlin - в Kotlin методы объектов и компаньонов и так вызываются статически. Она только генерирует дополнительный статический метод для JVM.

Методы, помеченные @JvmStatic, не могут быть абстрактными и должны иметь реализацию.

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

  • JvmField,
    аннотация для генерации полей вместо геттеров/сеттеров
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить