Может ли Lambda находиться в data class

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

Ответ

Да, лямбда может быть свойством в data class. Однако, нужно учитывать несколько нюансов:

  1. Лямбда не учитывается в автоматически генерируемых методах (equals(), hashCode(), toString()).
  2. Если лямбда участвует в copy(), поведение может быть неожиданным из-за захвата контекста.

Пример:

data class User(
    val name: String,
    val onAction: () -> Unit
)

fun main() {
    val user1 = User("Alice", { println("Hi!") })
    val user2 = User("Alice", { println("Hello!") })
    println(user1 == user2) // true, так как лямбды игнорируются
}