Ключевое слово jvmfield

Ключевое слово jvmfield применяется к свойствам в Kotlin для создания публичного поля, которое будет доступно в Java-коде напрямую, без необходимости использования геттеров и сеттеров. Это полезно при интеграции с Java-библиотеками, которые ожидают прямого доступа к полям классов.

Синтаксис

kotlinclass MyClass {
  @JvmField
  var name: String = "default"
}
kotlinclass MyClass {
  companion object {
    @JvmField
    val COUNT: Int = 10
  }
}

Пример

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

kotlinclass User {
  @JvmField
  var age: Int = 25
  
  var name: String = "John" // обычное свойство
}

Теперь в Java-коде можно обращаться к полю age напрямую:

javaUser user = new User();
user.age = 30; // прямой доступ
System.out.println(user.age); // прямой доступ

user.setName("Mike"); // через сеттер
System.out.println(user.getName()); // через геттер

Пример

Использование @JvmField для статических полей в companion object:

kotlinclass Config {
  companion object {
    @JvmField
    val VERSION: String = "1.0.0"
    
    val BUILD_DATE: String = "2023-01-01" // обычное свойство
  }
}

Доступ из Java-кода:

java// Прямой доступ к статическому полю
System.out.println(Config.VERSION);

// Доступ через геттер
System.out.println(Config.Companion.getBUILD_DATE());

Пример

Использование @JvmField с изменяемыми свойствами:

kotlinclass DataStorage {
  @JvmField
  var data: Array<String> = arrayOf("a", "b", "c")
}

Доступ и изменение из Java-кода:

javaDataStorage storage = new DataStorage();

// Прямое чтение
System.out.println(storage.data[0]);

// Прямое изменение
storage.data = new String[] {"x", "y", "z"};

Ограничения

Ключевое слово @JvmField можно применять только:

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

  • ключевое слово const,
    которое используется для объявления констант времени компиляции
  • ключевое слово companion,
    которое используется для объявления companion object
  • аннотацию @JvmStatic,
    которая делает методы доступными как статические в Java
  • модификатор lateinit,
    который позволяет отложить инициализацию свойства