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,
аннотация для генерации полей вместо геттеров/сеттеров