Как data class выглядит под капотом

«Как data class выглядит под капотом» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Data class в Kotlin — это синтаксический сахар, который генерирует boilerplate-код автоматически. Под капотом компилятор создает:

  1. equals()/hashCode() — сравнивает свойства по значению.
  2. toString() — выводит имя класса и значения свойств.
  3. componentN() — функции для деструктуризации.
  4. copy() — создает копию с возможностью изменения отдельных свойств.

Пример декомпилированного Java-кода (упрощенно):

data class User(val name: String, val age: Int)

Превращается в:

public final class User {
    private final String name;
    private final int age;

    // Геттеры, equals, hashCode, toString, copy и componentN()
}

Ограничения:

  • Свойства должны быть в конструкторе (val/var).
  • Нельзя наследовать data class (если он не open).
  • componentN() работают только для свойств конструктора.