ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
1289 of 1310 menu
Хочешь читать code.mu на своем родном языке? Помоги с переводом! Переведем мы сами, тебе нужно указать на ошибки перевода:) Оставляй заявку ->

Ключевое слово 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,
    который позволяет отложить инициализацию свойства