Spec-Zone.ru › Kotlin 2

Использование записей Java в Kotlin

Записи — это классы в Java для хранения неизменяемых данных. Записи содержат фиксированный набор значений — компоненты записи. В Java у них лаконичный синтаксис, и с ними не нужно писать шаблонный код:

// Java
public record Person (String name, int age) {}

Компилятор автоматически создает final-класс, унаследованный от java.lang.Record, со следующими членами:

  • закрытое final-поле для каждого компонента записи

  • открытый конструктор с параметрами для всех полей

  • набор методов для реализации структурного равенства: equals(), hashCode(), toString()

  • открытый метод для чтения каждого компонента записи

Записи очень похожи на классы данных в Kotlin.

Использование записей Java в коде Kotlin

Классы-записи с компонентами, объявленными в Java, можно использовать так же, как классы со свойствами в Kotlin. Чтобы обратиться к компоненту записи, просто используйте его имя, как для свойств Kotlin:

val newPerson = Person("Kotlin", 10)
val firstName = newPerson.name

Объявление записей в Kotlin

Kotlin поддерживает объявление записей только для классов данных, и класс данных должен соответствовать требованиям.

Чтобы объявить класс-запись в Kotlin, используйте аннотацию @JvmRecord:

Применение @JvmRecord к существующему классу не является бинарно-совместимым изменением. Оно меняет соглашение об именовании методов доступа к свойствам класса.

@JvmRecord
data class Person(val name: String, val age: Int)

Эта аннотация, специфичная для JVM, позволяет сгенерировать:

  • компоненты записи, соответствующие свойствам класса, в файле класса

  • методы доступа к свойствам, имена которых соответствуют соглашению об именовании записей Java

Класс данных предоставляет реализации методов equals(), hashCode() и toString().

Требования

Чтобы объявить класс данных с аннотацией @JvmRecord, он должен соответствовать следующим требованиям:

  • Класс должен находиться в модуле, для которого целевая версия байткода JVM — 16 (или 15, если включен параметр компилятора -Xjvm-enable-preview).

  • Класс не может явно наследовать какой-либо другой класс (в том числе Any), поскольку все записи JVM неявно наследуют java.lang.Record. Однако класс может реализовывать интерфейсы.

  • Класс не может объявлять свойства с полями хранения, кроме свойств, инициализированных соответствующими параметрами первичного конструктора.

  • Класс не может объявлять изменяемые свойства с полями хранения.

  • Класс не может быть локальным.

  • Первичный конструктор класса должен иметь такую же видимость, как и сам класс.

Включение записей JVM

Для записей JVM требуется целевая версия 16 или выше для генерируемого байткода JVM.

Чтобы указать ее явно, используйте параметр компилятора jvmTarget в Gradle или Maven.

Аннотирование компонентов записей в Kotlin

В Java аннотации компонента записи автоматически распространяются на поле хранения, геттер, сеттер и параметр конструктора. Воспроизвести такое поведение в Kotlin можно с помощью all в качестве цели использования.

Например:

@JvmRecord
data class Person(val name: String, @all:Positive val age: Int)

При использовании @JvmRecord с @all: Kotlin:

  • Распространяет аннотацию на свойство, поле хранения, параметр конструктора, геттер и сеттер.

  • Также применяет аннотацию к компоненту записи, если аннотация поддерживает RECORD_COMPONENT в Java.

Поддержка аннотациями компонентов записей

Чтобы сделать аннотацию доступной как для свойств Kotlin , так и для компонентов записей Java, добавьте следующие метааннотации в объявление аннотации:

  • Для Kotlin: @Target

  • Для компонентов записей Java: @java.lang.annotation.Target

Например:

@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
@java.lang.annotation.Target(ElementType.CLASS, ElementType.RECORD_COMPONENT)
annotation class ExampleClass

Теперь можно применять @ExampleClass к классам и свойствам Kotlin, а также к классам и компонентам записей Java.

Дополнительное обсуждение

Дополнительные технические сведения и обсуждение см. в этом предложении по языку для записей JVM.

12 августа 2026 г.
Вызов кода Kotlin из JavaСтроки в Java и Kotlin

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-records.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API