Ключевое слово jvmfield
Ключевое слово jvmfield
применяется к свойствам в Kotlin
для создания публичного поля, которое будет доступно в Java-коде
напрямую, без необходимости использования геттеров и сеттеров.
Это полезно при интеграции с Java-библиотеками, которые ожидают
прямого доступа к полям классов.
Синтаксис
class MyClass {
@JvmField
var name: String = "default"
}
class MyClass {
companion object {
@JvmField
val COUNT: Int = 10
}
}
Пример
Создадим класс с полем, помеченным аннотацией @JvmField
:
class User {
@JvmField
var age: Int = 25
var name: String = "John" // обычное свойство
}
Теперь в Java-коде можно обращаться к полю age
напрямую:
User user = new User();
user.age = 30; // прямой доступ
System.out.println(user.age); // прямой доступ
user.setName("Mike"); // через сеттер
System.out.println(user.getName()); // через геттер
Пример
Использование @JvmField
для статических полей
в companion object:
class Config {
companion object {
@JvmField
val VERSION: String = "1.0.0"
val BUILD_DATE: String = "2023-01-01" // обычное свойство
}
}
Доступ из Java-кода:
// Прямой доступ к статическому полю
System.out.println(Config.VERSION);
// Доступ через геттер
System.out.println(Config.Companion.getBUILD_DATE());
Пример
Использование @JvmField
с изменяемыми свойствами:
class DataStorage {
@JvmField
var data: Array<String> = arrayOf("a", "b", "c")
}
Доступ и изменение из Java-кода:
DataStorage storage = new DataStorage();
// Прямое чтение
System.out.println(storage.data[0]);
// Прямое изменение
storage.data = new String[] {"x", "y", "z"};
Ограничения
Ключевое слово @JvmField
можно применять только:
- к свойствам, не имеющим собственных геттеров/сеттеров
- к свойствам в объектах (object) и companion object
- к свойствам без модификатора
private
илиprotected
- к свойствам без модификатора
const
Смотрите также
-
ключевое слово
const
,
которое используется для объявления констант времени компиляции -
ключевое слово
companion
,
которое используется для объявления companion object -
аннотацию
@JvmStatic
,
которая делает методы доступными как статические в Java -
модификатор
lateinit
,
который позволяет отложить инициализацию свойства