Kotlin 中的 Data Class 和 Regular Class 有什么区别?

What is the difference between Data Class and Regular Class in Kotlin?

除了编译器自动为Data生成某些函数Class之外,它们之间的根本区别是什么?

在 Kotlin 中,使用 data class 关键字声明的 类 只会生成一些额外的方法:

  • 等于
  • 哈希码
  • toString
  • 复制
  • 组件X

声明常规 class 并手动定义这些方法会产生完全相同的结果。字节码级别没有其他区别。

然而,您确实有一些额外的限制(没有非 属性 构造函数参数,继承限制......),但这些只是编译时限制,因此生成的方法在 predictable/non 令人惊讶的方式。

official doc 涵盖了关于它们的所有细节。